반응형

[python]CSV 데이터 포멧 입출력

CSV데이터

CSV(Comma Separated Values)데이터를 처음 접할때 엑셀에서 지원되는 포멧이기 때문에 처음에는 엑셀파일로 아는 경우가 많다. 그러나 실제로는 콤마를 기준으로 데이터를 구분하는 형식이라 볼 수 있다. 이는 CSV의 원 뜻만 확인해도 알 수 있다.

기본적으로 문자열 형태로 저장되기 때문에 문자열 처리에 자신이 있다면 쉽게 csv데이터를 만드는 것과 읽는 것을 하기에는 간단한 편이지만, 간단한 만큼 ','(콤마)가 들어있는 데이터에 대해서는 구분이 잘 안된다. 그리고 이러한 문제가 데이터 오염이라고 말을 한다.

물론 콤마를 데이터안에 반드시 입력을 해야 할 경우에는 "따옴표로 감싸주는 방법이 있다. 그러나 데이터에 다시 따옴표가 들어가야 할 경우 상황이 복잡해지게 된다. 가능하면 간단한 데이터 그중에서도 수치 데이터에 사용하기를 권장한다. 그외에 복잡한 데이터의 경우 다른 형태의 포멧을 사용하길 권장한다.


파이썬에서 CSV

본 예시는 '파이썬 프로그래밍으로 지루한 작업 자동화하기'서적의 예시를 참조하였다.

csv파일 읽기

수학자들의 사랑을 받는 파이썬은 최근에는 CSV 모듈이 자체적으로 내장이 되어 있다. (물론 문자열처리에 자신이 있다면 직접 구현해도 상관없지만, 굳이 바퀴를 재 발명할 필요는 없다.) 따라서 추가로 모듈을 다운로드 설치 과정 없이 import해서 사용할 수 있다. 사용방법은 csv파일을 open한뒤에 csv모듈의 reader 객체를 생성하여서 읽을 수 있다. 이때 읽어진 데이터는 리스트 형식으로 읽어진다.

 여기서 주목해야 할 점은 읽어진 모든 데이터는 문자열로 읽어진다는 점이다. 만약 수치를 처리하고 싶다면 수치형으로 형전환을 해야 한다.


예시1)

>>>import csv
>>>exampleFile = open('example.csv')
>>>exampleReader = csv.reader(exampleFile)
>>>exampleData = list(exampleReader)




csv파일 쓰기

반대로 csv 파일로 쓸경우에는 csv모듈의 writer객체를 생성하고 파일open객체를 연결시켜줘야 쓸 수 있다. 단, open시 줄바꿈 옵션을 제거(newline='')해야 한다. 이는 csv모듈에서 한줄씩 작성될때 마지막에 줄바꿈으로 구분하기 때문이다.


예시2)

import csv
>>>outputFile = open('output.csv', 'w', newline='')
>>>outputWrite = csv.writer(outputFile)
>>>outputWrite.writerow(['spam', 'eggs', 'bacon', 'ham'])
>>>outputWrite.writerow(['hello, world!', 'eggs', 'bacon', 'ham'])
>>>outputWrite.writerow([1, 2, 3.141592, 4])
>>>outputFile.close()


예시에서 hello, world 부분을 csv파일을 다른 편집기로 열어보면 ""으로 감싸진 것을 확인할 수 있다.



생각해 볼 점

만약 데이터가 안들어 있는 빈경우에는 csv를 편집기로 열어서 확인할 경우 콤마(,)만 있는 것을 확인할 수 있다. 이 경우 읽게되면 문자열 형식으로 읽기 때문에 ''(빈문자) 형태로 읽어진다.

 또한 csv의 파일의 에러를 확인하는 방법으로 콤마의 개수를 확인하는 방식이기 때문에 파일이 깨진경우(혹은 데이터 오염) 대부분 콤마의 개수가 안맞는 경우이다.


참고자료

서적, 파이썬 프로그래밍으로 지루한 작업 자동화하기



반응형

+ Recent posts