파이썬 - CSV 파일 만들기

CSV란? (Comma-separated-Values)

  • 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일이다.
  • 확장자는 .csv이며 MIME 형식은 text/csv이다.
  • 비슷한 포맷으로는 탭으로 구분하는 ‘tab-separated values’(TSV)나, 반각 스페이스로 구분하는 ‘space-separated values’(SSV) 등이 있으며, 이것들을 합쳐서 character-separated values(CSV), delimiter-separated values라고 부르는 경우가 많다.

CSV 파일 사용하는 이유?

  • 파일 크기가 작으므로, 표 형식의 데이터를 Plain Text로 쉽게 생성 가능
  • 대부분의 프로그래밍 언어나, ㅣ데이터분석 프로그램에서 CSV 파일 지원
  • 파이썬 내장 라이브러리만으로 읽기/쓰기 가능

CSV 파일 mode 작성 방법

  • mode 작성할 때, r(읽기), w(쓰기), a(추가하기) 세가지 중 하나와, t(텍스트), b(바이너리) 둘중 하나와 반드시 결합해야 하며, 나머지는 optional하게 사용 가능하다.
  • mode : 파일이 열리는 모드
    • ‘r’: 읽기 용으로 열림(기본값)
    • ‘w’: 쓰기 위해 열기, 파일을 먼저 자른다.
    • ‘x’: 베타적 생성을 위해 열리고, 이미 존재하는 경우 실패
    • ‘a’: 쓰기를 위해 열려 있고, 파일의 끝에 추가하는 경우 추가한다.
    • ‘b’: 2진 모드(바이너리 모드)
    • ‘t’: 텍스트 모드(기본값)
    • ‘+’: 업데이트(읽기 및 쓰기)를 위한 디스크 파일 열기
    • ‘U’: 유니버설 개행 모드(사용되지 않음)


CSV 파일 쓰기

  • CSV 파일 쓰기 위해서는 .csv 파일을 쓰기모드로 오픈하고 파일객체를 csv.writer(파일객체)에 넣으면 된다.
  • CSV writer는 writerow()라는 메서드를 통해 list 데이터를 한 라인 추가하게 된다.
  • 윈도우에서는 csv 모듈에서 데이터 작성 시, 각 라인 뒤에 빈 라인이 추가되는 문제가 있는데, 이를 없애기 위해 (파이썬 3에서) 파일 open 시, newline=”” 설정한다.

방법 1

1
2
3
4
5
6
7
import csv

f = open('output.csv', 'wt', encoding='utf-8, newline="")
writer = csv.writer(f)
writer.writerow([1, "김철수", False])
writer.writerow([2, "조현근", True])
f.close()

방법 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import csv

rows = [
['프로그래밍', '데이터 사이언스', '블록체인'],
['프론트엔드', '인공지능', '비트코인'],
['백엔드', '빅데이터', '보안'],
]

with open('technology.csv', 'wt', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerows(rows)

with open('technology.csv', 'rt', encoding='utf-8') as f:
print(f.read())

# 구분자도 변경 가능하다.
with open('technology.csv', 'wt', encoding='utf-8') as f:
writer = csv.writer(f, delimiter='|')
writer.writerows(rows)

방법 3

각 Row 데이터가 list/tuple인 경우

1
2
3
4
5
6
7
8
9
10
import csv

writer = csv.writer(파일객체)

# 1 Row 쓸 때
writer.writerow(['컬럼1', '컬럼2', '컬럼3'])

# 다수 Row 쓸 때
wirte.writerows(['1행1열', '1행2열', '1행3열']
['2행1열', '2행2열', '2행3열'])

방법 4

각 Row 데이터가 dict인 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import csv

fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(파일객체, fieldnames=fieldnames)

writer.writeheader()

# 1 Row 쓸 때
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})

# 다수 Row 쓸 때
writer.writerow([{'first_name':'HyeonKen', 'last_name':'Cho'},
{'first_name':'Nus', 'last_name':'Jo'}
])


CSV 파일 읽기

CSV 파일을 읽기 위해서는 먼저 파이썬에 내장되어 있는 csv 모듈을 import 한다.

방법 1

1
2
3
4
5
6
7
import csv

f = open('technology.csv', 'rt', encoding='utf-8')
reader = csv.reader(f)
for line in reader:
print(line)
f.close()

방법 2

list로 받는 경우

1
2
3
4
5
6
import csv

with open('technology.csv', 'rt', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row) # list type

방법 3

dict로 받는 경우

1
2
3
4
5
6
7
import csv

with open('technology.csv', 'rt', encoding='utf-8') as f:
fieldnames = None # 디폴트, None이면 첫번째 Row가 fieldnames로 지정
reader = csv.DictReader(f, fieldnames=fieldnames)
for row in reader:
print(row) # dict type