Python의 CSV 모듈 사용법 및 설명

 

Python의 CSV (Comma-Separated Values) 모듈은 데이터를 CSV 형식으로 읽고 쓰는데 사용되는 매우 유용한 라이브러리입니다. 이 글에서는 CSV 모듈의 기본적인 사용법부터 고급 기능까지 상세하게 설명하고, 특히 윈도우즈에서 엑셀로 파일을 열 때 필요한 인코딩 설정 및 DictReaderDictWriter의 활용 방법에 대해서도 자세히 다룰 것입니다.

 

1. CSV 모듈 소개 및 기본 사용법

1) CSV 모듈의 기능 및 특징

CSV 모듈은 표준 Python 라이브러리의 일부로, CSV 파일을 읽고 쓰는 데 필요한 기능을 제공합니다. CSV 파일은 각 데이터가 쉼표로 구분되는 텍스트 파일로, 엑셀과 같은 스프레드시트 프로그램에서 널리 사용됩니다.

2) CSV 파일 읽기: csv.reader

CSV 파일을 읽기 위해서는 csv.reader 객체를 사용합니다. 간단한 예제로 기본 사용법을 살펴보겠습니다.

import csv

with open('example.csv', mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

위 코드는 'example.csv' 파일을 읽어 각 행을 출력합니다. with 구문을 사용하여 파일을 안전하게 열고, csv.reader 객체를 통해 파일 내용을 순회합니다.

3) CSV 파일 쓰기: csv.writer

CSV 파일을 쓰기 위해서는 csv.writer 객체를 사용합니다. 이 예제는 간단한 데이터를 CSV 파일로 저장하는 방법을 보여줍니다.

import csv

data = [['Name', 'Age'], ['Alice', 24], ['Bob', 22]]

with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    writer = csv.writer(file)
    for row in data:
        writer.writerow(row)

writer.writerow 메서드를 사용하여 각 행을 CSV 파일에 씁니다. newline=''을 설정함으로써, 행 사이에 추가적인 빈 줄이 생성되지 않도록 합니다.

 

2. 윈도우즈에서 엑셀로 CSV 파일 열기: 인코딩 문제

1) 윈도우즈 엑셀에서의 인코딩 문제

윈도우즈에서 엑셀로 CSV 파일을 열 때 한글 등의 특정 문자가 깨지는 문제가 종종 발생합니다. 이는 엑셀이 기본적으로 CSV 파일을 CP949 또는 다른 인코딩으로 해석하기 때문입니다.

2) 해결책: 인코딩 "utf-8-sig"

이 문제를 해결하기 위해 CSV 파일을 작성할 때 'utf-8-sig' 인코딩을 사용하는 것이 좋습니다. 'utf-8-sig' 인코딩은 UTF-8 인코딩의 변형으로, 파일의 시작 부분에 바이트 순서 표시(Byte Order Mark, BOM)를 추가합니다. 엑셀은 이 BOM을 인식하고 파일을 올바르게 해석할 수 있습니다.

with open('output.csv', mode='w', encoding='utf-8-sig', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

위 코드는 'utf-8-sig' 인코딩을 사용하여 CSV 파일을 작성합니다.

 

3. CSV 모듈의 고급 기능: DictReader와 DictWriter

1) DictReader: 헤더를 키로 사용하기

DictReader는 CSV 파일의 각 행을 사전(dictionary)으로 읽어들입니다. 이 때, 첫 번째 행의 값을 키(key)로 사용합니다.

with open('example.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row)

이 코드는 CSV 파일의 각 행을 사전 형태로 읽어 출력합니다. 예를 들어, 첫 번째 행이 'Name', 'Age'라면, row{'Name': 'Alice', 'Age': '24'}와 같은 형태를 가질 것입니다.

2) DictWriter: 사전 데이터를 CSV 파일로 쓰기

DictWriter는 사전 데이터를 CSV 파일로 쓰는 데 사용됩니다. DictWriter를 사용하려면 먼저 필드명(헤더)을 지정해야 합니다.

with open('output.csv', mode='w', encoding='utf-8-sig', newline='') as file:
    fields = ['Name', 'Age']
    writer = csv.DictWriter(file, fieldnames=fields)

    writer.writeheader()
    for data in [{'Name': 'Alice', 'Age': 24}, {'Name': 'Bob', 'Age': 22}]:
        writer.writerow(data)

writeheader 메서드를 사용하여 첫 번째 행으로 필드명을 씁니다. 그 후, 각 사전 데이터를 writerow 메서드를 통해 파일에 씁니다.

 

4. 마무리

Python의 CSV 모듈은 간단하면서도 매우 강력한 도구입니다. 이 글에서는 기본적인 사용법부터 시작하여, 윈도우즈에서 엑셀로 파일을 열 때의 인코딩 설정, 그리고 DictReaderDictWriter를 사용하는 방법까지 살펴보았습니다. 이러한 기능들을 활용하면 데이터 처리와 관련된 작업을 보다 쉽고 효율적으로 수행할 수 있습니다.