본문 바로가기

개발 관련/python

csv 모듈로 csv 파일 만들기

리스트 csv로 저장하기

csv 파일은 다음과 같이 생성한다.

import csv

list = [50, 10, 20, 30]

with open('file.csv', 'w', newline='') as f:
	writer = csv.writer(f)
    writer.writerow(list)

 

만약 인코딩 옵션을 추가하려면 다음과 같이 해주면 된다.

with open('file.csv', 'w', encoding='utf-8-sig', newline='') as f:
	writer = csv.writer(f)
	writer.writerow(list)

 

+) 주의할 사항

위의 코드에서도 봤듯이 writerow는 리스트의 형태로 값이 저장되어져야 파일형태로 잘 저장되는 것을 확인할 수 있다.

어떤 타입이든 호환이 가능하다고 설명은 되어있으나 (맞는 말이긴 하다) list 형태로 넣어주지 않으면 다음과 같은 결과를 얻을 수도 있다.

위 결과는 다음과 같이 코드를 작성했을 때 발생했던 것이다.

result = ['전 >한두명만 들여라', '후 >한두명만 들여라']

with open('file.csv', 'w', encoding='utf-8-sig', newline='') as f:
	writer = csv.writer(f)
    for r in result:
    	writer.writerow(r)

 

혹시나 싶어 csv.writer에게 quoting 옵션도 추가해봤지만 해결되지 않았다.

답은 리스트 형태로 전달해주면 되는 것이었다.

result = ['전 >한두명만 들여라', '후 >한두명만 들여라']

with open('file.csv', 'w', encoding='utf-8-sig', newline='') as f:
	writer = csv.writer(f)
    for r in result:
    	writer.writerow([r])  # 해결

아주 맘에 드는 형태는 아니지만 식별 가능하여 만족한다.


csv 파일 읽기

with open('file.csv', 'r', encoding='utf-8-sig') as f:
	reader = csv.reader(f)
    for row in reader:
    	print(row) # 원하는 방식에 따라 코드 변경