CSV(Comma-Separated Values) 파일은 데이터를 쉼표로 구분하여 저장하는 텍스트 파일 형식으로, 다양한 데이터 교환에 널리 사용됩니다. 파이썬(Python)은 csv 모듈을 통해 CSV 파일을 쉽게 읽고 쓸 수 있으며, 대량의 데이터를 처리하는 데 매우 유용합니다. 이번 포스팅에서는 파이썬에서 CSV 파일을 처리하는 방법과 다양한 활용 사례를 살펴보겠습니다.

1. CSV 파일이란?

CSV 파일은 각 데이터 항목을 쉼표로 구분하여 저장하는 텍스트 파일 형식입니다. 각 줄은 하나의 레코드를 나타내며, 첫 번째 줄은 일반적으로 필드 이름(헤더)을 포함합니다. CSV 파일은 간단한 구조 덕분에 다양한 애플리케이션과 프로그래밍 언어에서 쉽게 사용할 수 있습니다.

1.1. CSV 파일 예제

다음은 data.csv라는 CSV 파일의 예시입니다.

name,age,city
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago

이 파일에는 name, age, city라는 세 개의 필드가 있으며, 각각의 레코드는 사람의 이름, 나이, 도시 정보를 포함합니다.

2. CSV 파일 읽기

파이썬에서 CSV 파일을 읽기 위해 csv 모듈의 reader 또는 DictReader 클래스를 사용할 수 있습니다. 이들 클래스는 CSV 파일의 각 행을 리스트나 딕셔너리 형태로 반환합니다.

2.1. csv.reader를 사용한 CSV 파일 읽기

csv.reader를 사용하면 CSV 파일의 각 행을 리스트 형태로 읽을 수 있습니다.

import csv

# CSV 파일 읽기
with open('data.csv', mode='r') as file:
    csv_reader = csv.reader(file)
    header = next(csv_reader)  # 헤더 읽기
    print(f"Header: {header}")

    for row in csv_reader:
        print(f"Row: {row}")

위 코드에서는 data.csv 파일을 읽고, 첫 번째 줄을 헤더로 처리한 후, 각 행을 리스트로 출력합니다.

출력 예시는 다음과 같습니다:

Header: ['name', 'age', 'city']
Row: ['Alice', '30', 'New York']
Row: ['Bob', '25', 'Los Angeles']
Row: ['Charlie', '35', 'Chicago']

2.2. csv.DictReader를 사용한 CSV 파일 읽기

csv.DictReader를 사용하면 CSV 파일의 각 행을 딕셔너리 형태로 읽을 수 있습니다. 이 경우 첫 번째 줄이 딕셔너리의 키가 됩니다.

import csv

# CSV 파일 읽기
with open('data.csv', mode='r') as file:
    csv_reader = csv.DictReader(file)

    for row in csv_reader:
        print(f"Row: {row}")

위 코드에서는 data.csv 파일을 읽고, 각 행을 딕셔너리로 변환하여 출력합니다.

출력 예시는 다음과 같습니다:

Row: {'name': 'Alice', 'age': '30', 'city': 'New York'}
Row: {'name': 'Bob', 'age': '25', 'city': 'Los Angeles'}
Row: {'name': 'Charlie', 'age': '35', 'city': 'Chicago'}

3. CSV 파일 쓰기

파이썬에서 CSV 파일에 데이터를 쓰기 위해 csv.writer 또는 DictWriter 클래스를 사용할 수 있습니다. 이들 클래스를 사용하면 리스트나 딕셔너리 데이터를 CSV 파일에 저장할 수 있습니다.

3.1. csv.writer를 사용한 CSV 파일 쓰기

csv.writer를 사용하여 데이터를 CSV 파일에 저장할 수 있습니다.

import csv

# CSV 파일 쓰기
with open('output.csv', mode='w', newline='') as file:
    csv_writer = csv.writer(file)

    # 헤더 쓰기
    csv_writer.writerow(['name', 'age', 'city'])

    # 데이터 쓰기
    csv_writer.writerow(['Alice', 30, 'New York'])
    csv_writer.writerow(['Bob', 25, 'Los Angeles'])
    csv_writer.writerow(['Charlie', 35, 'Chicago'])

위 코드에서는 output.csv 파일에 데이터를 저장합니다. 먼저 헤더를 쓰고, 그 다음에 각 행을 리스트로 작성하여 저장합니다.

3.2. csv.DictWriter를 사용한 CSV 파일 쓰기

csv.DictWriter를 사용하면 딕셔너리 데이터를 CSV 파일에 저장할 수 있습니다.

import csv

# CSV 파일 쓰기
with open('output.csv', mode='w', newline='') as file:
    fieldnames = ['name', 'age', 'city']
    csv_writer = csv.DictWriter(file, fieldnames=fieldnames)

    # 헤더 쓰기
    csv_writer.writeheader()

    # 데이터 쓰기
    csv_writer.writerow({'name': 'Alice', 'age': 30, 'city': 'New York'})
    csv_writer.writerow({'name': 'Bob', 'age': 25, 'city': 'Los Angeles'})
    csv_writer.writerow({'name': 'Charlie', 'age': 35, 'city': 'Chicago'})

위 코드에서는 output.csv 파일에 딕셔너리 데이터를 저장합니다. 먼저 필드 이름을 지정하고, 데이터를 행 단위로 기록합니다.

4. CSV 파일 처리 시 고려 사항

4.1. 다른 구분자 사용하기

기본적으로 CSV 파일은 쉼표(,)로 구분되지만, 때로는 탭(\t), 세미콜론(;) 등의 다른 구분자를 사용할 수도 있습니다. 이 경우 delimiter 매개변수를 사용하여 구분자를 지정할 수 있습니다.

import csv

# 탭으로 구분된 파일 읽기
with open('tab_separated.csv', mode='r') as file:
    csv_reader = csv.reader(file, delimiter='\t')

    for row in csv_reader:
        print(row)

4.2. 인코딩 설정

CSV 파일의 인코딩은 파일의 텍스트 형식에 따라 다를 수 있습니다. 특히, UTF-8이 아닌 다른 인코딩을 사용하는 파일을 처리할 때는 인코딩을 명시적으로 지정해야 합니다.

import csv

# 인코딩 지정하여 파일 읽기
with open('data.csv', mode='r', encoding='utf-8') as file:
    csv_reader = csv.reader(file)

    for row in csv_reader:
        print(row)

4.3. 대용량 CSV 파일 처리

대용량 CSV 파일을 처리할 때는 메모리 사용을 최적화하기 위해 한 번에 한 줄씩 읽어오는 방식으로 처리하는 것이 좋습니다. csv.reader는 기본적으로 이 방식으로 작동하며, 파일의 모든 내용을 한 번에 메모리에 로드하지 않습니다.

5. CSV 파일 처리의 실용적인 예제

5.1. CSV 파일에서 특정 열 추출

CSV 파일에서 특정 열만 추출하여 새로운 파일에 저장할 수 있습니다.

import csv

# 특정 열만 추출하여 새로운 CSV 파일에 저장
with open('data.csv', mode='r') as infile, open('filtered_output.csv', mode='w', newline='') as outfile:
    csv_reader = csv.DictReader(infile)
    csv_writer = csv.DictWriter(outfile, fieldnames=['name', 'city'])

    csv_writer.writeheader()

    for row in csv_reader:
        csv_writer.writerow({'name': row['name'], 'city': row['city']})

5.2. CSV 파일에서 데이터 필터링

CSV 파일의 데이터를 조건에 따라 필터링하여 출력할 수 있습니다.

import csv

# 나이가 30 이상인 데이터만 필터링하여 출력
with open('data.csv', mode='r') as file:
    csv_reader = csv.DictReader(file)

    for row in csv_reader:
        if int(row['age']) >= 30:
            print(row)

6. pandas를 사용한 CSV 파일 처리

파이썬의 pandas 라이브러리를 사용하면 CSV 파일을 더욱 강력하고 유연하게 처리할 수 있습니다. pandas는 데이터 분석에 특화된 라이브러리로, CSV 파일을 DataFrame으로 읽고 다양한 데이터 조작을 수행할 수 있습니다.

6.1. pandas로 CSV 파일 읽기

import pandas as pd

# CSV 파일을 DataFrame으로 읽기
df = pd.read_csv('data.csv')

# 데이터 출력
print(df)

6.2. pandas로 CSV 파일 쓰기

import pandas as pd

# DataFrame 생성
data = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [30, 25, 35], 'city': ['New York', 'Los Angeles', 'Chicago']}
df = pd.DataFrame(data)

# DataFrame

을 CSV 파일로 저장
df.to_csv('output.csv', index=False)

결론

이번 포스팅에서는 파이썬에서 CSV 파일을 처리하는 다양한 방법에 대해 알아보았습니다. csv 모듈을 사용한 기본적인 파일 읽기와 쓰기부터, pandas를 활용한 고급 데이터 조작까지 다루었습니다. CSV 파일은 데이터를 간단하고 효과적으로 저장하고 교환할 수 있는 형식으로, 이를 처리하는 방법을 잘 익혀두면 데이터 분석, 애플리케이션 개발, 테스트 데이터 관리 등 다양한 상황에서 유용하게 사용할 수 있습니다.


이 글을 통해 파이썬의 CSV 파일 처리 방법을 이해하고, 실습을 통해 이를 사용하는 방법을 익힐 수 있을 것입니다. CSV 파일을 자유롭게 다루며, 데이터 분석과 처리에 유용하게 활용해 보세요!

+ Recent posts