CSV 파일 사용하기

1. CSV 파일

CSV란 Comma-separated values의 약자로서 CSV 파일은 각 라인의 컬럼들이 콤마로 분리된 텍스트 파일 포맷이다. 가장 간단한 형태의 CSV 파일은 문자열을 콤마로 Split 하여 처리하면 되지만, 간혹 컬럼 데이타에 콤마가 있을 경우 이중인용부호로 감싸서 데이타 내의 콤마를 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() 라는 메서드를 통해 list 데이타를 한 라인 추가하게 된다. 윈도우즈의 경우 csv 모듈에서 데이타를 쓸 때 각 라인 뒤에 빈 라인이 추가되는 문제가 있는데, 이를 없애기 위해 (파이썬 3 에서) 파일을 open 할 때 newline='' 와 같은 옵션을 지정한다 (주: 파이썬 2의 경우는 newline 옵션 없이 바이너리 모드로 오픈할 것).
아래 예제는 output.csv 라는 CSV 파일에 2개 라인을 추가하는 예이다.

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 파일과 비슷하지만, 콤마 대신 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객체)와 같이 리스트로 변환하였는데, 이는 데이타 양이 적을 때 데이타를 메모리로 한꺼번에 가져와 처리할 때 편리하다.

본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.