파이썬 - 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 | import csv |
방법 2
1 | import csv |
방법 3
각 Row 데이터가 list/tuple인 경우1
2
3
4
5
6
7
8
9
10import 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
14import 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 | import csv |
방법 2
list로 받는 경우1
2
3
4
5
6import 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
7import 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