[References]
http://pythonstudy.xyz
1. CSV 파일
CSV란 'Comma-Separated Values'의 약자로서 CSV 파일은 각 라인의 컬럼들이 Comma(,)로 분리된 텍스트 파일 포맷이다. 가장 간단한 형태의 CSV 파일은 문자열을 Comma로 Split 하여 처리하면 되지만, 간혹 컬럼 Data에 Comma가 있을 경우 이중인용부호로 감싸서 Data 내의 콤마를 Escape하기 (예: "Lee, Alex") 때문에, 파이썬에 내장된 csv 모듈을 사용하여 .csv 파일을 처리하는 것이 좋다.
2. CSV 파일 읽기
CSV 파일을 읽기 위해서는 먼저 파이썬에 기본 내장된 csv 모듈을 import 한다.
그 다음 .csv 파일을 열고 파일 객체를 'csv.reader'(파일 객체)에 넣으면 된다. 'csv.reader()' 함수는 Iterator 타입인 reader 객체를 리턴하므로 for 루프를 돌며 한 라인씩 가져올 수 있다. 이 때 리턴되는 각 라인은 컬럼들을 나열한 리스트(List) 타입이다.
아래 예제는 data.csv 라는 CSV 파일을 읽어 각 라인을 출력하는 예이다.
import csv
f = open('data.csv', 'r', encoding='utf-8')
rdr = csv.reader(f)
for line in rdr:
print(line)
f.close()
# 입력 : data.csv 파일 내용
1,김정수,2017-01-19 11:30:00,25
2,박민구,2017-02-07 10:22:00,35
3,정순미,2017-03-22 09:10:00,33
# 출력
['1', '김정수', '2017-01-19 11:30:00', '25']
['2', '박민구', '2017-02-07 10:22:00', '35']
['3', '정순미', '2017-03-22 09:10:00', '33']
3. CSV 파일 쓰기
CSV 파일을 쓰기 위해서는 .csv 파일을 쓰기 모드로 열고 파일 객체를 'csv.writer'(파일 객체)에 넣으면 된다. CSV writer는 'writerow()' 라는 Method를 통해 List Data를 한 라인 추가하게 된다. WIndows의 경우 csv 모듈에서 Data를 쓸 때 각 라인 뒤에 빈 라인이 추가되는 문제가 있는데, 이를 없애기 위해 (파이썬 3 에서) 파일을 open 할 때 newline=''와 같은 옵션을 지정한다.
아래 예제는 output.csv 라는 CSV 파일에 두 개 라인을 추가하는 예이다.
import csv
f = open('output.csv', 'w', encoding='utf-8', newline='')
wr = csv.writer(f)
wr.writerow([1, "김정수", False])
wr.writerow([2, "박상미", True])
f.close()
4. TSV 파일
CSV 파일과 비슷하지만, Comma 대신 Tab으로 컬럼을 분리하는 파일 포맷을 TSV 파일이라 한다. TSV 파일은 컬럼 delimiter만 차이가 나므로, csv 모듈의 reader() 혹은 writer() 함수에서 delimiter='\t' 옵션만 지정해 주면 나머지는 CSV와 동일하다.
import csv
# .tsv 쓰기
f = open('test.tsv', 'w', encoding='utf-8', newline='')
wr = csv.writer(f, delimiter='\t')
wr.writerow([1, "김정수", False])
wr.writerow([2, "박상미", True])
f.close()
# .tsv 읽기
f = open('test.tsv', 'r', encoding='utf-8')
rdr = csv.reader(f, delimiter='\t')
r = list(rdr)
print("Id=%s : Name=%s" % (r[0][0], r[0][1]))
f.close()
위 예제에서 csv.reader()로부터 리턴된 객체를 list(reader객체)와 같이 List로 변환하였는데, 이는 Data 양이 적을 때 Data를 메모리로 한꺼번에 가져와 처리할 때 편리하다.