[Python 모듈] csv : CSV 파일을 읽고 쓰기 위한 모듈

1. csv 모듈이란?

 

csv 모듈은 CSV(Comma-Separated Values) 파일을 읽고 쓰기 위한 모듈입니다. CSV 파일은 데이터를 텍스트 파일에 쉼표(,)로 구분하여 저장하는 파일 형식입니다. 이 모듈을 사용하면 CSV 파일을 처리하는 코드를 간결하게 작성할 수 있으며, 데이터를 빠르게 처리할 수 있습니다. csv 모듈은 기본적으로 쉼표(,)를 구분자로 사용하지만, 다른 구분자를 사용할 수도 있습니다. 또한, 문자열이나 숫자 등 다양한 데이터 유형을 지원합니다.

 

csv모듈은 별도의 설치 과정이 필요없습니다. 모듈을 사용하려면 아래와 같이 import를 하면 됩니다.

import csv

 


2. csv.reader

 

csv.reader() 함수는 CSV 파일을 읽어들일 때 사용되는 함수입니다. 이 함수는 CSV 파일 내의 각 행(row)을 리스트(list) 형태로 반환합니다. csv.reader() 함수는 첫 번째 매개변수로 파일 객체(file object)를 받으며, 두 번째 매개변수로 CSV 파일의 구분자(delimiter)를 받습니다. 기본적으로 csv 모듈은 쉼표(,)를 구분자로 사용합니다.

 

코드에서는 csv.reader() 함수를 사용하여 'example.csv' 파일을 읽어들이고, 각 행을 출력합니다. 

import csv

# CSV 파일 열기
with open('example.csv', newline='') as csvfile:
    # CSV 파일 읽기
    reader = csv.reader(csvfile, delimiter=',')
    
    # 각 행 출력
    for row in reader:
        print(row)

 


3. csv.writer

 

csv.writer() 함수는 CSV 파일을 쓸 때 사용되는 함수입니다. 이 함수는 CSV 파일 내의 각 행(row)을 쉼표(,)로 구분된 문자열(string) 형태로 쓰도록 지정합니다. csv.writer() 함수는 첫 번째 매개변수로 파일 객체(file object)를 받으며, 두 번째 매개변수로 CSV 파일의 구분자(delimiter)를 받습니다. 기본적으로 csv 모듈은 쉼표(,)를 구분자로 사용합니다.

 

코드에서는 csv.writer() 함수를 사용하여 'example.csv' 파일을 쓰고, 각 행을 구분자(delimiter)로 구분된 문자열(string) 형태로 씁니다. 

import csv

# CSV 파일 쓰기
with open('example.csv', 'w', newline='') as csvfile:
    # CSV 파일 쓰기
    writer = csv.writer(csvfile, delimiter=',')
    
    # 행 쓰기
    writer.writerow(['Name', 'Age', 'City'])
    writer.writerow(['Alice', '25', 'New York'])
    writer.writerow(['Bob', '30', 'Los Angeles'])




4. csv.DictReader

 

csv.DictReader() 함수는 CSV 파일을 읽어들일 때 사용되는 함수입니다. 이 함수는 CSV 파일 내의 각 행(row)을 딕셔너리(dictionary) 형태로 반환합니다. csv.DictReader() 함수는 첫 번째 매개변수로 파일 객체(file object)를 받으며, 두 번째 매개변수로 CSV 파일의 구분자(delimiter)를 받습니다. 또한, DictReader 객체를 생성할 때 fieldnames 매개변수를 사용하여 각 열(column)의 이름을 지정할 수 있습니다.

 

코드에서는 csv.DictReader() 함수를 사용하여 'example.csv' 파일을 읽어들이고, 각 행을 딕셔너리(dictionary) 형태로 출력합니다. 

import csv

# CSV 파일 열기
with open('example.csv', newline='') as csvfile:
    # CSV 파일 읽기
    reader = csv.DictReader(csvfile, delimiter=',', fieldnames=['Name', 'Age', 'City'])
    
    # 각 행 출력
    for row in reader:
        print(row)

 


5. csv.DictWriter

 

csv.DictWriter() 함수는 CSV 파일을 쓸 때 사용되는 함수입니다. 이 함수는 딕셔너리(dictionary) 형태로 된 데이터를 CSV 파일에 쓸 수 있습니다. csv.DictWriter() 함수는 첫 번째 매개변수로 파일 객체(file object)를 받으며, 두 번째 매개변수로 CSV 파일의 구분자(delimiter)를 받습니다. 또한, DictWriter 객체를 생성할 때 fieldnames 매개변수를 사용하여 각 열(column)의 이름을 지정할 수 있습니다.

 

코드에서는 csv.DictWriter() 함수를 사용하여 딕셔너리(dictionary) 형태로 된 데이터를 'example.csv' 파일에 쓰고, 각 행을 구분자(delimiter)로 구분된 문자열(string) 형태로 씁니다. 

 

import csv

# 딕셔너리 형태의 데이터
data = [
    {'Name': 'Alice', 'Age': 25, 'City': 'New York'},
    {'Name': 'Bob', 'Age': 30, 'City': 'Los Angeles'},
    {'Name': 'Charlie', 'Age': 28, 'City': 'Chicago'}
]

# CSV 파일 쓰기
with open('example.csv', 'w', newline='') as csvfile:
    # CSV 파일 쓰기
    writer = csv.DictWriter(csvfile, fieldnames=['Name', 'Age', 'City'])
    
    # 행 쓰기
    writer.writeheader()
    for row in data:
        writer.writerow(row)

 

writeheader() 메서드는 DictWriter 객체의 인스턴스 메서드이며, 인자를 받지 않습니다. 이 메서드는 CSV 파일의 첫 번째 줄에 헤더를 쓰며, 각 열의 이름은 DictWriter 객체 생성자의 fieldnames 인자에 지정된 순서대로 출력됩니다.

 

writerow() 메서드는 DictWriter 객체의 인스턴스 메서드이며, 인자로 딕셔너리를 받습니다. 이 메서드는 받은 딕셔너리를 CSV 파일의 한 줄로 씁니다. 딕셔너리의 키(key)는 CSV 파일의 열에 해당하며, 값(value)은 해당 열에 쓰입니다.

 


6. 연습문제

 

문제: CSV 파일에서 직업이 "Engineer"이고 나이가 30세 이하인 사람의 이름과 도시를 출력하는 코드를 작성하세요.


예시 CSV 파일

Name,Occupation,Age,City
John,Engineer,28,San Francisco
Jane,Designer,35,New York
Mike,Engineer,24,Los Angeles
Alice,Artist,29,Chicago

 

 

코드에서는 csv.DictReader() 함수를 사용하여 'example.csv' 파일을 읽어들이고, 각 행을 딕셔너리(dictionary) 형태로 검사합니다. 조건을 만족하는 경우, 결과를 저장할 리스트에 추가합니다. 마지막으로, 결과를 출력합니다.

import csv

# CSV 파일 열기
with open('example.csv', newline='') as csvfile:
    # CSV 파일 읽기
    reader = csv.DictReader(csvfile)
    
    # 결과 저장할 리스트 초기화
    results = []
    
    # 각 행 검사
    for row in reader:
        # 조건 검사
        if row['Occupation'] == 'Engineer' and int(row['Age']) <= 30:
            results.append({'Name': row['Name'], 'City': row['City']})
    
    # 결과 출력
    for result in results:
        print(f"{result['Name']} ({result['City']})")