반응형

파이썬으로 CSV 파일 읽기: 초보자도 이해하는 예제

파이썬 csv 읽기는 엑셀이나 데이터 파일을 다룰 때 가장 먼저 익혀두면 좋은 기본 작업입니다. 특히 저장된 회원 목록, 매출 데이터, 설문 결과처럼 표 형태의 자료를 불러올 때 파이썬 csv 읽기만 알아도 할 수 있는 일이 꽤 많아집니다. 이번 글에서는 초보자도 이해할 수 있도록 CSV 파일을 읽는 가장 쉬운 방법부터 한글 파일을 다룰 때 주의할 점까지 정리해보겠습니다.

CSV 파일이란 무엇일까?

CSV는 Comma-Separated Values의 약자로, 쉼표를 기준으로 데이터를 나눈 텍스트 파일입니다. 엑셀처럼 표 데이터를 저장할 수 있지만 파일 구조는 훨씬 단순해서 프로그램으로 읽고 쓰기 쉽습니다.

예를 들어 아래처럼 생긴 파일이 CSV입니다.

name,age,city
Alice,25,Seoul
Bob,31,Busan
Charlie,28,Incheon

이 데이터를 파이썬으로 읽으면 행 단위로 처리할 수 있고, 필요한 열만 골라서 사용할 수도 있습니다.

파이썬에서 CSV 파일 읽는 가장 기본적인 방법

파이썬 표준 라이브러리에는 csv 모듈이 있어서 별도 설치 없이 바로 사용할 수 있습니다.

1. 기본 예제

import csv

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

실행 결과는 아래처럼 나옵니다.

['name', 'age', 'city']
['Alice', '25', 'Seoul']
['Bob', '31', 'Busan']
['Charlie', '28', 'Incheon']

즉, 한 줄씩 읽어서 리스트 형태로 가져온다고 생각하면 이해하기 쉽습니다.

언제 이 방법을 쓰면 좋을까?

파일 구조가 단순하고, 각 행을 순서대로 읽어서 처리하면 되는 경우에 적합합니다. 예를 들어 이름 목록, 주문 내역, 간단한 로그 파일처럼 열 개수가 정해진 데이터를 다룰 때 편리합니다.

헤더를 제외하고 데이터만 읽는 방법

실무에서는 첫 줄이 제목 행인 경우가 많습니다. 이럴 때는 첫 줄을 건너뛰고 읽는 경우가 많습니다.

import csv

with open("people.csv", "r", encoding="utf-8") as file:
    reader = csv.reader(file)
    next(reader)  # 헤더 한 줄 건너뛰기

    for row in reader:
        print(row)

next(reader)를 사용하면 첫 번째 줄을 한 번 읽고 넘어가기 때문에 이후 반복문에서는 실제 데이터만 처리할 수 있습니다.

열 이름으로 읽고 싶다면 DictReader 사용하기

열 순서를 외우지 않고 컬럼 이름 기준으로 데이터를 읽고 싶다면 csv.DictReader가 더 편합니다.

import csv

with open("people.csv", "r", encoding="utf-8") as file:
    reader = csv.DictReader(file)

    for row in reader:
        print(row["name"], row["city"])

이 방식은 코드 가독성이 좋아서 초보자에게도 추천할 만합니다. 특히 열 개수가 많아질수록 인덱스보다 키 이름으로 접근하는 편이 실수를 줄이기 좋습니다.

실무에서 자주 쓰는 예제

아래는 CSV에서 특정 조건의 데이터만 찾는 간단한 예제입니다.

import csv

with open("people.csv", "r", encoding="utf-8") as file:
    reader = csv.DictReader(file)

    for row in reader:
        if int(row["age"]) >= 30:
            print(f'{row["name"]} / {row["age"]} / {row["city"]}')

이런 식으로 읽어온 데이터를 조건문과 함께 쓰면, 나이가 30 이상인 사람만 추리거나 특정 지역 데이터만 분리하는 작업도 쉽게 할 수 있습니다.

실무 활용 포인트

  • 회원 목록에서 특정 조건에 맞는 사람만 추리기
  • 주문 데이터에서 금액이 큰 항목만 찾기
  • 엑셀에서 저장한 CSV를 읽어 다른 파일로 가공하기
  • 자동화 스크립트의 입력 데이터로 활용하기

한글 CSV 파일을 읽을 때 주의할 점

한국어 CSV를 다룰 때 가장 많이 막히는 부분은 인코딩입니다. 파일은 멀쩡해 보이는데 파이썬에서 읽을 때 한글이 깨지거나 오류가 나는 경우가 있습니다.

import csv

with open("data.csv", "r", encoding="cp949") as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

엑셀에서 저장한 한글 CSV는 cp949로 저장된 경우가 많고, 웹이나 개발 환경에서 만든 CSV는 utf-8인 경우가 많습니다. 따라서 파일이 안 읽히면 인코딩을 먼저 의심하는 습관이 중요합니다.

왜 이 부분이 중요할까?

CSV 읽기 자체보다도, 실제 현업에서는 인코딩 문제 때문에 시간을 더 많이 쓰는 경우가 많습니다. 그래서 단순히 코드만 외우기보다 파일이 어떤 환경에서 만들어졌는지도 함께 보는 것이 좋습니다.

파이썬 csv 읽기에서 자주 하는 실수

  • 인코딩을 지정하지 않아서 한글이 깨지는 경우
  • 헤더를 데이터로 같이 처리해서 결과가 꼬이는 경우
  • 숫자 데이터를 문자열 그대로 비교하는 경우
  • 쉼표가 아닌 다른 구분자를 쓰는 파일인데 기본 설정으로 읽는 경우

특히 나이나 금액처럼 숫자로 비교해야 하는 값은 int()float()로 변환해서 처리해야 원하는 결과가 나옵니다.

구분자가 쉼표가 아닐 때는 어떻게 할까?

가끔 CSV처럼 보이지만 실제로는 탭이나 세미콜론으로 구분된 파일도 있습니다. 이럴 때는 delimiter 옵션을 지정하면 됩니다.

import csv

with open("data.csv", "r", encoding="utf-8") as file:
    reader = csv.reader(file, delimiter=";")
    
    for row in reader:
        print(row)

파일을 열어봤는데 한 줄 전체가 하나의 값처럼 들어온다면, 인코딩뿐 아니라 구분자도 함께 확인해보는 것이 좋습니다.

자주 묻는 질문 FAQ

Q1. 파이썬에서 CSV 파일 읽을 때 꼭 csv 모듈을 써야 하나요?

간단한 텍스트 처리라면 open()으로 직접 읽을 수도 있지만, CSV는 구분자와 줄 단위 처리 규칙이 있어서 보통은 csv 모듈을 사용하는 편이 더 안전하고 편합니다.

Q2. utf-8로 읽었는데 오류가 나면 어떻게 해야 하나요?

한글 CSV 파일이라면 cp949utf-8-sig로 다시 시도해보는 것이 좋습니다. 특히 엑셀에서 저장한 파일은 cp949인 경우가 많습니다.

Q3. csv.reader와 DictReader 중 무엇을 쓰는 게 좋나요?

열 개수가 적고 순서가 명확하면 csv.reader도 충분합니다. 하지만 컬럼 이름으로 읽는 편이 이해하기 쉽고 실수도 적어서 초보자라면 DictReader를 더 추천합니다.

Q4. CSV 파일을 읽은 뒤 바로 엑셀처럼 다룰 수 있나요?

CSV는 기본적으로 텍스트 데이터입니다. 읽은 뒤에는 리스트나 딕셔너리 형태로 처리하게 되며, 엑셀 파일처럼 서식까지 포함해서 다루려면 openpyxl 같은 별도 도구가 필요합니다.

마무리

이번 글에서는 파이썬 csv 읽기의 기본 개념, csv.reader 사용법, DictReader 활용, 한글 인코딩 주의점까지 한 번에 정리했습니다. 처음에는 간단한 예제로 시작하고, 익숙해지면 조건 검색이나 자동화 입력 파일 처리까지 확장해보면 좋습니다.

한글 CSV를 읽다가 글자가 깨지거나 UnicodeDecodeError가 났다면 파이썬 CSV 한글 깨짐 해결 방법 글을 같이 보면 바로 도움이 됩니다. 파일을 여는 기본 문법이 아직 익숙하지 않다면 파이썬 파일 열어서 읽기, 문자열 패턴 처리까지 연결해서 공부하고 싶다면 파이썬 정규식 (regular expression) 글도 함께 읽어보세요.

반응형

+ Recent posts