CSV
comma-separated values.
몇 가지 필드를 쉼표로 구분한 텍스트 데이터 또는 파일이다. 확장자는 .csv이며 MIME 형식은 text/csv이다. comma-separated variables라고도 한다. 스프레드시트나 데이터베이스에서 많이 사용한다.
2021.11.01 - [Python] JSON 데이터 다루기에 이어서 Python으로 CSV 데이터/파일을 읽고 쓰는 방법을 정리해둔다.
csv 모듈
import csv
csv 모듈은 CSV 형식의 데이터를 읽고 쓰는 클래스로, reader와 writer 객체를 사용할 수 있다.
Dictionary 데이터는 DictReader와 DictWriter 객체를 이용하여 읽고 사용할 수 있다.
csv 모듈은 Python 기본 내장 모듈이므로 별도 설치가 필요하지 않다.
읽기
reader(csvfile) 함수를 사용하여 CSV 형식의 파일을 읽을 수 있다. reader 함수로 전달하는 csvfile이 file 객체인 경우에는 newline='' 로 open 해야 한다.
reader 함수는 iterator 타입의 reader 객체를 반환하므로 for 문을 이용해 한 행씩 데이터를 가져올 수 있으며, 가져온 데이터는 리스트 형이다.
import csv
with open('test.csv', 'r', encoding='UTF-8', newline='') as f:
rdr = csv.reader(f)
for row in rdr:
print(row)
쓰기
writer(csvfile) 함수를 사용하여 CSV 형식의 파일을 쓸 수 있다. writer 함수로 전달하는 csvfile이 file 객체인 경우에는 newline=''로 open 해야 한다.
CSV writer는 writerow 함수를 이용해 리스트형 데이터를 한 행씩 작성한다.
import csv
with open('test.csv', 'w', encoding='UTF-8', newline='') as f:
wr = csv.writer(f)
wr.writerow(['1', '김정수', '2017-01-19 11:30:00', '25'])
wr.writerow(['2', '박민구', '2017-02-07 10:22:00', '35'])
wr.writerow(['3', '정순미', '2017-03-22 09:10:00', '33'])
읽기 - Dictionary
리스트형이 아니라 key-value 형태의 Dictionary로 CSV 파일을 읽을 때는 DictReader() 함수를 사용할 수 있다.
import csv
with open('test.csv', 'r', encoding='UTF-8', newline='') as f:
rdr = csv.DictReader(f)
for line in rdr:
print(line)
쓰기 - Dictionary
리스트형이 아니라 key-value 형태의 Dictionary로 CSV 파일을 쓸 때는 DictWritrer(csvfile, fieldnames) 함수를 사용할 수 있다. DictWriter 함수의 fieldnames 매개변수가 column의 기준이 된다.
import csv
with open('test.csv', 'w', encoding='UTF-8', newline='') as f:
fieldnames = ["SN", "City", "Country"]
wr = csv.DictWriter(f, fieldnames=fieldnames)
wr.writeheader()
wr.writerow({"SN": "1", "City": "Seoul", "Country": "Korea"})
wr.writerow({"SN": "2", "City": "Tokyo", "Country": "Japanese"})
여러 데이터를 한 번에 쓰기
csv.writer, csv.DictWriter의 writerow 함수는 한 번에 한 줄씩 데이터를 작성할 수 있다. 따라서 여러 개의 데이터를 작성할 때는 반복문을 이용해야 하는데, writerows 함수를 사용하면 한 번에 여러 개의 데이터를 작성할 수 있다.
import csv
d = [
{"SN": "1", "City": "Seoul", "Country": "Korea"},
{"SN": "2", "City": "Tokyo", "Country": "Japanese"}
]
with open('test.csv', 'w', encoding='UTF-8', newline='') as f:
fieldnames = d[0].keys()
wr = csv.DictWriter(f, fieldnames=fieldnames)
wr.writeheader()
wr.writerows(d)
참고 문서
https://ko.wikipedia.org/wiki/CSV_(%ED%8C%8C%EC%9D%BC_%ED%98%95%EC%8B%9D)
https://docs.python.org/ko/3/library/csv.html
https://subinium.github.io/kaggle-basic/python/csv