안녕하세요. 명월입니다.
이 글은 Python에서 CSV를 다루는 방법에 대한 글입니다.
제가 예전에 Python에서 파일을 다루는 방법에 대해 설명한 적이 있습니다.
링크 - [Python] IO (파일 입출력)
Python은 로컬에서 자주 사용하는 스크립트 언어이다 보니 이런 파일 다루는 라이브러리가 잘 되어 있는 것 같습니다.
다른 언어도 지원을 안하는 건 아닌데.. 개인적으로는 Python이 로컬에서 데이터 만드는 게 편하지 않나 싶습니다.
# csv 모듈을 import한다.
import csv;
# 리스트형 데이터이다.(안에 튜플로 설정했지만, 리스트형 타입도 상관없다.
data = [('Tester','1'),('Who','2'),('Tom','3')];
# 파일을 연다. (여기서 내부에서 writeline을 사용하는 것같은데 newline을 설정하지 않으면 csv파일이 개행이 두번 이루어진다.)
with open('csvexample.csv','wt', newline = '') as handle:
# 파일 리소스를 csv 모듈의 wrtier 함수에 넣는다.
csv_out = csv.writer(handle);
# data를 csv 파일로 만든다. (이것 한줄로 모든 리스트를 csv파일로 만드는 것)
csv_out.writerows(data);
# writerow 함수는 한 줄씩 만드는 것으로 for문과 같이 사용하면 위와 같다. 즉 list의 값에 조건식을 넣으려면 아래와 같이도 만들수 있다.
#for item in data:
# csv_out.writerow(item);
csv파일이 콤마(,)와 개행의 구분으로 만들어 졌습니다. 이번에는 이렇게 만들어진 csv파일을 Python으로 읽어 오겠습니다.
# csv 모듈을 import한다.
import csv;
# 파일을 연다.
with open('csvexample.csv','rt') as handle:
# 파일 리소스를 csv 모듈의 reader 함수에 넣는다.
csv_in = csv.reader(handle);
# 컴프리핸션을 통해 데이터를 리스트화 한다.
data = [row for row in csv_in];
print(data);
그대로 콤파(,)와 개행 구분으로 리스트로 csv파일을 읽어 왔습니다.
여기까지는 csv에 해더가 없는 경우를 만든 경우입니다.
딕셔너리를 이용하면 csv 파일에 첫번째 행은 데이터의 header(제목)으로 사용할 수 있습니다.
# csv 모듈을 import한다.
import csv;
# 데이터는 리스트형이지만 안에 데이터는 딕셔너리로 이루어져 있다.
data = [{'name':'Tester','no':1},{'name':'Who','no':2},{'name':'Tom','no':3}];
# 파일을 연다. (여기서 내부에서 writeline을 사용하는 것같은데 newline을 설정하지 않으면 csv파일이 개행이 두번 이루어진다.)
with open('csvexample.csv','wt', newline = '') as handle:
# 파일 리소스를 csv 모듈의 DictWriter 함수에 넣는다. 딕셔너리에서 csv로 만들 데이터를 리스트 형으로 지정한다.
csv_out = csv.DictWriter(handle, ['name', 'no']);
# 헤더를 만든다. (생략하면 헤더 생성을 하지 않는다.)
csv_out.writeheader();
# data를 csv 파일로 만든다. (이것 한줄로 모든 리스트를 csv파일로 만드는 것)
csv_out.writerows(data);
# writerow 함수는 한 줄씩 만드는 것으로 for문과 같이 사용하면 위와 같다. 즉 list의 값에 조건식을 넣으려면 아래와 같이도 만들수 있다.
#for item in data:
# csv_out.writerow(item);
딕셔너리로 이루어진 리스트로 csv를 만들었습니다. 그리고 첫 행은 header로 타이틀을 넣었습니다.
이번에는 다시 csv파일을 딕셔너리 타입으로 읽어 오겠습니다.
# csv 모듈을 import한다.
import csv;
# 파일을 연다.
with open('csvexample.csv','rt') as handle:
# 파일 리소스를 csv 모듈의 DictReader 함수에 넣는다.
csv_in = csv.DictReader(handle);
# 컴프리핸션을 통해 데이터를 리스트화 한다.
data = [row for row in csv_in];
print(data);
결과가 조금 예상과는 다르게 나오네요. 그래도 딕셔너리 타입으로 csv를 읽어 온 것은 맞습니다.
여기까지 Python에서 CSV를 다루는 방법에 대한 설명이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Development note > Python' 카테고리의 다른 글
[Python] Apache cgi에서 python을 사용하는 방법 (0) | 2020.01.21 |
---|---|
[Python] 웹 서버를 기동하는 방법(http.server) (0) | 2020.01.20 |
[Python] Websocket을 사용하는 방법 (2) | 2020.01.19 |
[Python] Python과 Java에서의 소켓 통신 (0) | 2020.01.17 |
[Python] Python과 C#에서의 소켓 통신 (2) | 2020.01.15 |
[Python] IO - INI 다루기 (0) | 2019.12.27 |
[Python] IO - JSON 다루기 (0) | 2019.12.26 |
[Python] IO - XML 다루기 (0) | 2019.12.25 |