반응형
들어가며
파이썬을 코딩하다 보면 파일 입출력은 필수다. 뭐... 어디든지 필수겠지, 하지만 파이썬에서는 데이터 분석을 하는 경우가 많기 때문에 데이터를 읽기/쓰기가 자유로워야 한다. 특히 구분자가 ','로 되어있는 csv파일을 자주 읽게 되는데 csv를 읽는 두가지 방법에 대해서 설명한다.
CSV파일 읽기/쓰기
파일 쓰기
with open('./file.csv', 'wb') as csvfile: writer = csv.writer(csvfile, delimiter=',') writer.writerow(['love'] * 3 + ['banana']) writer.writerow(['hong', 'love', 'banana']) writer.writerow(['monkey', 'kkikki', 'min']) # 출력결과 file.csv ''' love,love,love,banana hong,love,banana monkey,kkikki,min '''
파일 읽기
with open('./file.csv', 'rb') as csvfile: reader = csv.reader(csvfile, delimiter=',') for row in reader: print row # ['love', 'love', 'love', 'banana'] # ['hong', 'love', 'banana'] # ['monkey', 'kkikki', 'min']
DictWriter 사용하기
파일 쓰기
첫번째로 fieldnames을 입력을 한다. 여기서 fieldnames은 column명이라고 생각하면 된다. column명인 fisrt_name, last_nam에 해당하는 값을 row로 넣어주는 예제이다.
with open('./dic_file.csv', 'w') as csvfile: fieldnames = ['first_name', 'last_name'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'first_name' : 'banana', 'last_name' : 'ssang'}) writer.writerow({'first_name' : 'kong', 'last_name' : 'al'}) writer.writerow({'first_name' : 'kong', 'last_name' : 'dal'}) # 출력결과 dic_file.csv ''' first_name,last_name banana,ssang kong,al kong,dal '''
파일 읽기
파이썬의 Dict의 객체 형태로 파일을 읽어온다. 첫번째 줄에 column명들이 명시가 되어 있어야 한다. first_name, last_name이 key가 되고 row의 값이 key에 맞게 value로 들어간다.
with open('./dic_file.csv', 'rb') as csvfile: reader = csv.DictReader(csvfile) for row in reader: print row # {'first_name': 'banana', 'last_name': 'ssang'} # {'first_name': 'kong', 'last_name': 'al'} # {'first_name': 'kong', 'last_name': 'dal'}
모듈로 사용하기
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import csv | |
import os | |
def get_csv_writer(filename, rows, delimiter): | |
with open(filename, 'w') as csvfile: | |
fieldnames = rows[0].keys() | |
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter=delimiter) | |
writer.writeheader() | |
for row in rows: | |
try: | |
writer.writerow(row) | |
except Exception as detail: | |
print type(detail) | |
print detail | |
def get_csv_reader(filename, delimiter): | |
reader = [] | |
if not os.path.isfile(filename): | |
csvfile = open(filename, "w") | |
else: | |
csvfile = open(filename, "rb") | |
reader = csv.DictReader(csvfile, delimiter=delimiter) | |
return list(reader) |
외부 코드에서 사용하기 위해서는 아래와 같이 사용하시면 됩니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import CSVFileIO | |
CSVFileIO.write_csv("/home/banana/output.csv", result, ",") | |
reader = CSVFileIO.read_csv("/home/banana/input.csv", ",") |
반응형
'Programming > Python' 카테고리의 다른 글
[Python] argparse를 이용한 입력 파라미터 받는 방법 (0) | 2016.11.08 |
---|---|
[Python] Singleton Pattern을 이용한 Logger 만들기 (3) | 2016.08.11 |
[Python] 데이터 포맷 변환 - Protocol Buffer를 Json으로 변환 (0) | 2016.08.03 |
[Python] Enum 사용하는 방법 및 예제코드 (0) | 2016.05.31 |
[Python] collections를 이용한 Dictionary 정렬하기 (0) | 2016.05.25 |