Python Basic _ 9-2. 파이썬 CSV

WONY_yoon·2025년 10월 9일
post-thumbnail

Python CSV Read Write 알아보기

# Chapter09-2  
# CSV 파일 읽기 및 쓰기  
# CSV(Comma-Separated Values) : 콤마로 구분된 데이터 형식의 텍스트 파일  

import csv

# 예제 1 : 기본적인 CSV 파일 읽기
with open('resource/test1.csv', 'r') as f:
    reader = csv.reader(f)  # reader 객체 생성

    # 객체 및 속성 확인
    print(reader)             # reader 객체 정보 출력
    next(reader)              # 첫 번째 줄(header) 건너뛰기
    print(type(reader))       # <class '_csv.reader'>
    print(dir(reader))        # 속성 및 메서드 확인 (__iter__ 포함)
    print()
    print('=====' * 8)
    print()

    # 각 행을 반복 출력
    for c in reader:
        # 각 행은 리스트 형태로 반환됨
        print(' : '.join(c))  # 리스트를 문자열로 변환 후 출력

print()
print('=====' * 8)
print()

# 예제 2 : 구분자(delimiter) 지정하여 읽기
with open('resource/test1.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',')  # 콤마 구분자 명시

    for c in reader:
        print(c)   # 각 행 출력

print()
print('=====' * 8)
print()

# 예제 3 : DictReader 사용 → 각 행을 딕셔너리로 반환
with open('resource/test1.csv', 'r') as f:
    reader = csv.DictReader(f)  # 첫 행을 key로 인식하여 딕셔너리 구성
    print(reader)
    print(type(reader))         # <class '_csv.DictReader'>
    print(dir(reader))          # 주요 속성 확인
    print()

    for c in reader:
        for k, v in c.items():  # key, value 쌍으로 접근 가능
            print(k, v)
        print('-' * 15)

print()
print('=====' * 8)
print()

# 예제 4 : CSV 파일 쓰기 (writer 사용)
# 2차원 리스트 데이터 준비
w = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12],
    [13, 14, 15],
    [16, 17, 18],
    [19, 20, 21]
]

with open('resource/write1.csv', 'w', encoding='UTF-8') as f:
    print(dir(csv))  # csv 모듈 내 속성 확인
    wt = csv.writer(f)  # writer 객체 생성

    # 각 행을 파일에 작성
    for v in w:
        wt.writerow(v)  # 리스트 → CSV 행으로 작성

print()
print('=====' * 8)
print()

# 예제 5 : DictWriter 사용 → 딕셔너리 기반 CSV 쓰기
with open('resource/write2.csv', 'w', encoding='UTF-8') as f:
    # 필드명 정의
    field = ['One', 'Two', 'Three']

    # DictWriter 객체 생성
    wt = csv.DictWriter(f, fieldnames=field)
    wt.writeheader()  # 헤더 작성

    # 데이터 쓰기
    for v in w:
        wt.writerow({'One': v[0], 'Two': v[1], 'Three': v[2]})

0개의 댓글