Python 에서 CSV 파일 open 시 유니코드 에러를 Try, Except 문으로 접근할때 생기는 에러


이전 질문에서 조금 더 보완하여 다시 올립니다. 지정한 폴더에서 CSV 파일들을 읽어와 컬럼들을 새로운 CSV 파일에 작성하는 코드입니다. 파일들에 대하여 try 로 열고 오류가 나면 exceptutf-8 읽기를 해보려고 합니다.

import csv
import glob
import os
lst=[]
files=glob.glob('C:/dataset/*.csv')
with open('test2.csv','w',encoding='cp949',newline='') as testfile:
    csv_writer=csv.writer(testfile)
    for file in files:
        try:
            with open(file,'r') as infile:
                file=file[file.rfind('\\')+1:]
                reader=csv.reader(infile)
                headers=next(reader) 
                headers=[str for str in headers if str] 
                while len(headers) < 3 :
                    headers=next(reader) 
                    headers=[str for str in headers if str]
                lst=[file]+headers
                csv_writer.writerow(lst)
        except:
             with open(file,'r',encoding='utf8') as infile:
                file=file[file.rfind('\\')+1:]
                reader=csv.reader(infile)
                headers=next(reader)
                headers=[str for str in headers if str]
                while len(headers) < 3 :
                    headers=next(reader) 
                    headers=[str for str in headers if str]
                lst=[file]+headers
                csv_writer.writerow(lst)

그 결과 다음과 같은 에러가 발생합니다.

Traceback (most recent call last):
  File "C:\Python35\2.py", line 15, in <module>
    headers=next(reader)
UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 6: illegal multibyte sequence

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python35\2.py", line 23, in <module>
    with open(file,'r',encoding='utf8') as infile:
FileNotFoundError: [Errno 2] No such file or directory: '2010년1월기준.csv'

Try 에서 열어서 오류가 있다고 판단한 파일을 except에서 못 찾는게 Try에서 열린 파일이 닫기지 않아서 그런건가요? With 문을 사용하면 상관이 없는 걸로 아는데 왜 위와 같은 오류가 생길까요

  • 2017년 08월 02일에 작성됨

조회수 190


2 답변


좋아요
0
싫어요
채택취소하기

해결완료

  • 2017년 08월 03일에 작성됨


chardet 모듈을 사용해보세요.

https://pypi.python.org/pypi/chardet

import chardet

s = '가나다라'

cp949 = s.encode('cp949')
utf8 = s.encode('utf-8')

print(chardet.detect(cp949)['encoding'])
print(chardet.detect(utf8)['encoding'])

EUC-KR
utf-8
  • 2017년 08월 02일에 작성됨

  • 이상하게 파이썬을 재설치 후 폴더안에 코드를 같이 넣어서 실행하면 `UTF-8` 파일이 `Except` 문에서 잘 읽어집니다. 해결이 된 것 같습니다    김도훈   2017.8.3 14:31     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close