Python3 CSV 라이브러리에서 사용하는 인코딩 명시
그러나 open 함수를 그대로 사용하면 CSV 파일의 문자 코드가 UTF-8이라고 화가 날 수 있습니다.
나의 환경에서는 Shift-JIS가 정답으로, 문자 코드를 바꾸면 읽어 주었다.
로드에 사용한 코드
CSV 파일의 내용을 읽고 한 줄씩 표시합니다.
첫 번째 줄은 혼동되지만 소스 코드의 문자 코드는 UTF-8로 명시되어 있습니다.
readCSV.py# -*- coding: utf-8 -*-
import csv
# with文:中の処理が終われば自動でclose処理も行う
with open('book1.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
CSV 파일(Excel2016에서 생성)
book1.csv
Excel 2016에서 CSV를 저장할 때 선택한 형식이 CSV UTF-8 (쉼표로 구분)이면 유니 코드 텍스트에 CSV (쉼표로 구분)라고 Shift-JIS가되었습니다.
UTF-8의 CSV를 Python3에서로드하려고하면 화가납니다.
UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence
반대로 Shift-JIS는 읽을 수 있습니다.
['番号', '名前', '個数']
['1', 'りんご', '3']
['2', 'みかん', '6']
['3', 'ぶどう', '4']
문자 코드에 대한 설명
공식적으로는 쓰여 있었지만, 구체예까지 보지 않으면 알기 어려운 인상이 있다.
Python 3.6.3 문서 14.1. csv - CSV 파일 읽기/쓰기
14.1.5. 사용 예
open() 이 CSV 파일을 읽는 데 사용되기 때문에 파일은 기본적으로 시스템의 기본 인코딩으로 유니 코드 문자열로 디코딩됩니다 (locale.getpreferredencoding() 참조). 다른 인코딩을 사용하여 디코딩하려면 open 인수 encoding을 설정하고 다음과 같이하십시오.
import csv
with open('some.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)
아마 이 디폴트 인코딩이 원인으로, 내 환경에서는 Shift-JIS였던 것일까.
문서와 같이 encoding = 'utf-8'을 명시하면 UTF-8 CSV 파일도 읽었습니다.
Reference
이 문제에 관하여(Python3 CSV 라이브러리에서 사용하는 인코딩 명시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/v2okimochi/items/a120bdb32454d29ecf24
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -*- coding: utf-8 -*-
import csv
# with文:中の処理が終われば自動でclose処理も行う
with open('book1.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
book1.csv
Excel 2016에서 CSV를 저장할 때 선택한 형식이 CSV UTF-8 (쉼표로 구분)이면 유니 코드 텍스트에 CSV (쉼표로 구분)라고 Shift-JIS가되었습니다.
UTF-8의 CSV를 Python3에서로드하려고하면 화가납니다.
UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence
반대로 Shift-JIS는 읽을 수 있습니다.
['番号', '名前', '個数']
['1', 'りんご', '3']
['2', 'みかん', '6']
['3', 'ぶどう', '4']
문자 코드에 대한 설명
공식적으로는 쓰여 있었지만, 구체예까지 보지 않으면 알기 어려운 인상이 있다.
Python 3.6.3 문서 14.1. csv - CSV 파일 읽기/쓰기
14.1.5. 사용 예
open() 이 CSV 파일을 읽는 데 사용되기 때문에 파일은 기본적으로 시스템의 기본 인코딩으로 유니 코드 문자열로 디코딩됩니다 (locale.getpreferredencoding() 참조). 다른 인코딩을 사용하여 디코딩하려면 open 인수 encoding을 설정하고 다음과 같이하십시오.
import csv
with open('some.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)
아마 이 디폴트 인코딩이 원인으로, 내 환경에서는 Shift-JIS였던 것일까.
문서와 같이 encoding = 'utf-8'을 명시하면 UTF-8 CSV 파일도 읽었습니다.
Reference
이 문제에 관하여(Python3 CSV 라이브러리에서 사용하는 인코딩 명시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/v2okimochi/items/a120bdb32454d29ecf24
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import csv
with open('some.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)
Reference
이 문제에 관하여(Python3 CSV 라이브러리에서 사용하는 인코딩 명시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/v2okimochi/items/a120bdb32454d29ecf24텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)