파이썬 csv 읽기, 쓰기

CSV는 comma-separated Values의 약자로 쉼표(,)로 구분되는 텍스트 데이터 파일이다.

CSV의 아류로는 탭(\t)으로 구분하는 TSV(tab-separated values), 스페이스(공백)로 구분하는 SSV(space-separated values), 파이프(|)로 구분하는 PSV(pipe-separated values) 등이 있는데, 아무튼 CSV가 사실상 표준이라 보면 된다. 구분자(delimiter)를 무엇으로 쓸지 약속만 하면 되는 거니까.

파이썬으로 CSV 다룰 일이 많으니 간략한 코드 예시를 남겨보았다.

CSV 파일 읽기

아주 기본적인 방식은 아래와 같다.

import csv

with open('ex.csv', 'r') as f:
    csvreader = csv.reader(f, delimiter=',')

    # 헤더(컬럼명) 건너뛰고 싶을 때
    next(csvreader)

    for row in csvreader:
        print(row)

csv.reader() 메소드로 파일을 읽을 때 delimiter 옵션으로 파일 내에서 구분자가 무엇인지 선언해줄 수 있다. 기본값은 콤마인 게 당연한데, 만약 TSV파일처럼 탭(\t)과 같이 다른 문자로 구분되어 있다면 여기서 지정해주면 된다.

그리고 이렇게 가져온 객체는 iterable하기 때문에 반복문을 돌며 출력할 수 있다. 이렇게 출력해보면 각 행이 리스트 형태로 담겨 있는 걸 알 수 있다.

그런데 만약 리스트(list)가 아닌 만약 딕셔너리(dictionary) 형태로 읽고 싶다면 아래와 같이 csv.DictReader() 메소드를 사용하면 된다.

with open('ex.csv', 'r') as f:
    csvreader = csv.DictReader(f, delimiter=',')

    for row in csvreader:
        for key, value in row.items():
            print(key, value)

컬럼명이 key, 실제 데이터들은 value인 딕셔너리 형태로 각 행을 불러온다 생각하면 편하다.

CSV 파일 쓰기

리스트의 리스트 형태의 데이터를 csv 파일로 쓰는 방법을 익혀보자.

우선 writerow() 메소드로 한줄씩 쓰면서 반복문 돌기.

my_list = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]

with open('my_list.csv', 'w', newline='') as f:
    csvwriter = csv.writer(f)

    for row in my_list:
        csvwriter.writerow(row)

여기서 주의할 점은 newline을 명시했다는 거. 만약 이렇게 안 하면 위와 같이 반복문을 돌려 파일을 쓸 때 한 줄 건너 한 줄씩 써진다. 애초에 csv.writer()가 자동으로 줄바꿈을 하기 때문에.

그런데 굳이 이렇게 안 하고 writerows (“s” 포함) 를 사용하면 여러줄을 한 방에 쓸 수 있다.

my_list = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]

with open('my_list.csv', 'w', newline='') as f:
    csvwriter = csv.writer(f)
    csvwriter.writerows(my_list)

단순히 데이터를 CSV로 변환하는 게 목표라면 이렇게 writerows()를 쓰는 게 편하지만, 필요에 따라 한 줄씩 데이터를 검수하거나 뭔가 조건에 따라 작업을 하게 될 때는 한 줄씩 writerow()를 쓸 일도 많다.

파이썬으로 CSV 파일 다루기 끝.

추천 글

댓글 남기기