본문 바로가기

코딩/파이썬 표준 라이브러리

[CSV] 2장. CSV 파일 읽기

 

 

CSV 포맷의 파일을 읽기 위한 가장 쉬운 방법은 파이썬 내장 함수인 open을 with 구문과 함께 사용하는 것이라 생각합니다.

 

아래 데이터는 한국거래소에서 확인한 2020년 10월 5일부터 10월 30일까지 현재 대한민국 시가 총액 1위 기업인 삼성전자의 일별 주가 시세입니다.

python_csv_02_krx_samsung.csv
0.00MB

 

위 파일을 텍스트 에디터로 열어보면 아래와 같네요. 파이썬으로 뭔가를 해주면 이해하기 쉬울 것 같은 느낌이죠?

 

년/월/일,종가,대비,거래량(주),거래대금(원),시가,고가,저가,시가총액(백만),상장주식수(주)
2020/10/30,"56,600","-1,500","26,907,844","1,541,223,383,000","58,000","58,000","56,600","337,889,692","5,969,782,550"

 

이제 CSV 모듈로 위 파일을 읽어와 일별 종가, 전일 대비 등락 가격을 표시해 보도록 하겠습니다.

 

import csv

with open('python_csv_02_krx_samsung.csv', mode='rt', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row[0], row[1], row[2])

 

년/월/일 종가 대비
2020/10/30 56,600 -1,500
2020/10/29 58,100 -900
2020/10/28 59,000 -800
2020/10/27 59,800 -600
2020/10/26 60,400 200
2020/10/23 60,200 100
2020/10/22 60,100 -800
2020/10/21 60,900 0
2020/10/20 60,900 900
2020/10/19 60,000 500
2020/10/16 59,500 -500
2020/10/15 60,000 -900
2020/10/14 60,900 0
2020/10/13 60,900 500
2020/10/12 60,400 700
2020/10/08 59,700 -200
2020/10/07 59,900 900
2020/10/06 59,000 300
2020/10/05 58,700 500

 

내장 함수 open의 전달인자 구성은 아래와 같습니다. open 함수에 대한 자세한 사항은 Python Document 참고하며, 본 글에선 간단한 설명을 하도록 합니다.

 

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

 

1. open 함수의 첫번째 전달인자 file은 파이썬으로 읽어 들일 파일입니다. 본 글의 코드 상 읽어 들일 CSV 파일은 코드를 작성하여 실행할 파이썬 파일과 같은 폴더에 위치해야 합니다.

 

with open('python_csv_02_krx_samsung.csv', mode='rt', encoding='utf-8') as f:

 

2. open 함수의 두번째 전달인자 mode는 읽어들일 파일 모드로 파일 읽기가 기본값이라 생략해도 되나 명확화를 위해 텍스트 파일을 읽어 들인다는 의미의 'rt'를 명시적으로 전달했습니다.

 

3. encoding 정보 전달없이 코드를 실행하면 cp949 관련 오류가 발생하여 'utf-8'을 encoding 값으로 전달합니다.

 

4. csv.reader 함수를 통해 CSV 파일 내 라인 별 데이터 읽기가 가능한 reader object를 생성합니다.

 

5. for 문을 통해 라인 별 데이터를 읽습니다.

 

6. 아래와 같이 본 글에서 사용한 CSV 파일의 각 라인 데이터는 list(리스트)로 전달을 받기에 인덱싱으로 리스트의 첫번째~세번째 값만 print 함수로 출력합니다.

 

['년/월/일', '종가', '대비', '거래량(주)', '거래대금(원)', '시가', '고가', '저가', '시가총액(백만)', '상장주식수(주)']
['2020/10/30', '56,600', '-1,500', '26,907,844', '1,541,223,383,000', '58,000', '58,000', '56,600', '337,889,692', '5,969,782,550']

 

7. CSV 파일을 읽으면 모든 데이터는 string(문자열) 타입이라 목적에 따라 적절한 추가 코딩을 하면 굿~