Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 CSV 파일 읽는 방법: csv 모듈 기본부터 커스텀 구분자까지

CSV 파일이란?

CSV(Comma Separated Values) 파일은 데이터 값들이 쉼표로 구분되어 있는 일반 텍스트 파일입니다. 쉼표를 이용해 표 형태의 데이터를 단순한 텍스트로 표현하며, 확장자는 .csv를 사용합니다.

CSV 파일의 전형적인 모습은 다음과 같습니다.

Sr.No,Name,City,Age
1,Rahul,Kolkata,21
2,Karan,Amritsar,23
3,Priya,Bangalore,20

CSV 파일을 만드는 방법도 매우 간단합니다. 메모장에 위와 같은 형식으로 내용을 작성한 뒤 .csv 확장자로 저장하기만 하면 됩니다.

Python에서 CSV 파일 읽기

시스템 로컬 스토리지에 저장된 CSV 파일은 Python을 이용해 손쉽게 읽을 수 있습니다.

먼저 csv 모듈을 임포트해야 합니다. 그다음 파일에서 데이터를 읽어와야 하므로 읽기 모드('r')로 파일을 열고, csv.reader() 함수를 사용해 CSV 파일의 데이터를 읽습니다. csv.reader()는 반복 가능한(iterable) reader 객체를 반환하며, 이 객체를 순회하면서 CSV 파일의 내용을 처리할 수 있습니다.

구현 예제

로컬 시스템에 "ttp.csv"라는 이름의 CSV 파일이 저장되어 있다고 가정해 보겠습니다. 파일의 내용은 위 예시와 같습니다. 이 파일의 내용을 읽어 한 줄씩 출력해 보겠습니다.

예제 코드

import csv
with open('ttp.csv','r')as file:
    filecontent=csv.reader(file)
    for row in filecontent:
        print(row)

참고: CSV 파일과 Python 프로그램이 시스템상 동일한 위치, 즉 같은 폴더에 있어야 합니다.

실행 결과

['Sr.No', 'Name', 'City', 'Age']
['1', 'Rahul', 'Kolkata', '21']
['2', 'Karan', 'Amritsar', '23']
['3', 'Priya', 'Bangalore', '20']

코드 한 줄씩 살펴보기

  • import csv — 파일을 읽기 위해 이 모듈에 포함된 함수들을 사용하려면 Python에서 csv 모듈을 반드시 임포트해야 합니다.

  • open()으로 파일 열기 — open() 함수는 파일 이름과 열고자 하는 모드, 두 개의 매개변수를 받습니다. 여기서는 파일을 읽어야 하므로 모드를 'r'로 지정합니다.

  • csv.reader()로 파일 내용 읽기 — 이 함수는 반복 가능한 reader 객체를 반환하며, 이 객체를 변수에 담아 사용합니다.

  • 반복문으로 행 단위 출력 — 파일 내용을 순회하면서 각 행을 차례대로 출력합니다.

파일 위치 관련 주의사항

CSV 파일과 이를 읽는 Python 프로그램은 반드시 같은 위치에 있어야 합니다.

CSV 파일과 Python 프로그램은 로컬 시스템에서 같은 위치, 즉 같은 폴더에 있어야 합니다. 파일이 다른 위치에 있으면 예외가 발생하며 다음과 같은 오류가 출력됩니다.

Traceback (most recent call last):
    with open('ttp.csv','r')as file:
FileNotFoundError: [Errno 2] No such file or directory: 'ttp.csv'

커스텀 구분자로 CSV 파일 읽기

CSV 파일에서 사용할 수 있는 구분자가 쉼표만 있는 것은 아닙니다. :, ;, | 등 다른 구분자도 널리 사용됩니다. 쉼표 대신 다른 구분자를 사용했다면 그에 맞게 코드를 수정해야 합니다.

구현 예제

앞선 CSV 파일에서 구분자가 쉼표 대신 ':'(콜론)이라고 가정해 보겠습니다. 이 경우 코드는 아래와 같이 수정됩니다.

예제 코드

import csv
with open('ttp.csv','r')as file:
    filecontent=csv.reader(file,delimiter=':')
    for row in filecontent:
        print(row)

실행 결과

['Sr', 'No', 'Name', 'City', 'Age']
['1', 'Rahul', 'Kolkata', '21']
['2', 'Karan', 'Amritsar', '23']
['3', 'Priya', 'Bangalore', '20']

코드에서 유일하게 바뀐 부분은 csv.reader()에 CSV 파일에서 사용하는 구분자를 지정한 것입니다. 만약 구분자가 '|'라면 코드에서 해당 문자를 구분자로 명시해 주면 됩니다.

구분자를 별도로 지정하지 않으면 기본적으로 쉼표만 구분자로 인식합니다. 따라서 파일에 쉼표가 없으면 전체 행이 하나의 항목으로 처리됩니다.

예를 들어 ':' 구분자를 사용하는 위 파일에서 구분자를 지정하지 않으면 다음과 같이 잘못된 결과가 출력됩니다.

['Sr:No:Name:City:Age']
['1:Rahul:Kolkata:21']
['2:Karan:Amritsar:23']
['3:Priya:Bangalore:20']

위 출력에서 볼 수 있듯이 전체 행이 하나의 항목으로 처리되어 버립니다. 반드시 파일에 맞는 구분자를 지정해야 올바르게 데이터를 읽을 수 있습니다.

마무리 및 추가 팁

간단한 CSV 처리에는 csv 모듈이면 충분하지만, 대량의 데이터를 분석하거나 필터링·집계 작업이 필요하다면 pandas 라이브러리의 pd.read_csv() 함수를 활용하는 것도 좋은 방법입니다. pandas는 데이터를 DataFrame 형태로 불러와 훨씬 직관적인 데이터 조작을 가능하게 해줍니다.

또한 한글이 포함된 CSV 파일을 다룰 때는 open() 함수에 encoding='utf-8' 또는 encoding='cp949' 옵션을 지정하면 인코딩 오류를 예방할 수 있습니다.