[Python] 파이썬 CSV파일 입/출력 (FileI/O)

2021. 4. 27. 18:55 Python/Python 프로그래밍

들어가며

  파이썬을 코딩하다 보면 파일 입출력은 필수다. 뭐... 어디든지 필수겠지, 하지만 파이썬에서는 데이터 분석을 하는 경우가 많기 때문에 데이터를 읽기/쓰기가 자유로워야 한다. 특히 구분자가 ','로 되어있는 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'}

 

모듈로 사용하기

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)

 

외부 코드에서 사용하기 위해서는 아래와 같이 사용하시면 됩니다.

import CSVFileIO

CSVFileIO.write_csv("/home/banana/output.csv", result, ",")
reader = CSVFileIO.read_csv("/home/banana/input.csv", ",")

 

출처 : ourcstory.tistory.com/48?category=630693