Python

[Python] CSV 데이터 다루기

비번변경 2022. 10. 21. 22:06

CSV

comma-separated values.

csv 이미지

몇 가지 필드를 쉼표로 구분한 텍스트 데이터 또는 파일이다. 확장자는 .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)

csv.reader

 

쓰기

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'])

csv.writer

 

 

읽기 - 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)

csv.DictReader

 

쓰기 - 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.DictWriter

 

 

여러 데이터를 한 번에 쓰기

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)

writerows

 

 

 

참고 문서

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

CSV 파일 사용하기

https://subinium.github.io/kaggle-basic/python/csv