2017-03-24 3 views
1

필드에 따옴표가 들어 있고 파일이 UTF-8-BOM으로 인코딩 된 경우 클래스 unicodecsv.DictReader이 CSV 파일의 필드를 구문 분석 할 때 문제가 발생합니다. 첫 번째 필드는 모든 연속 필드가 제대로 제거 된 따옴표 문자를 유지합니다.unicodecsv.DictReader가 Python2.7에서 UTF-8-BOM 파일을 구문 분석 할 때 첫 번째 필드 이름에서 인용 문자를 제거하려면 어떻게해야합니까?

가 인쇄 값을
from unicodecsv import DictReader 
filename = "/tmp/test.csv" 
with open(filename, mode='r') as read_stream: 
    reader = DictReader(read_stream, encoding='utf-8-sig') 
    print reader.fieldnames 

:

['"Field1"','Field2','Field3'] 

가 먼저해야 할 수있는 방법이 있나요

"Field1","Field2","Field3" 
content1,content2,content3 

예 파이썬 코드 :

예 UTF-8 BOM은 CSV 파일을 인코딩 필드는 다른 것과 같고 따옴표 문자는 제거 했습니까?

답변

0

한 가지 방법은 직접 작성한 코드가 기본 라이브러리의 실제 버그를 나타내므로 해당 issues on github에 추가해야한다고 생각하지만 직접 BOM을 직접 사용하는 것입니다. BOM을 사용한 후에 대신 utf-8 코덱을 사용하십시오.

# My test code to write a file with a BOM 
import io 
filename = "/tmp/test.csv" 
with io.open('test.csv', 'w', encoding='utf-8-sig') as f: 
    f.write(u'''\ 
"Field1","Field2","Field3" 
content1,content2,content3 
''') 

from unicodecsv import DictReader 
with open(filename, mode='r') as read_stream: 
    # Consume the BOM 
    read_stream.read(3) 
    reader = DictReader(read_stream, encoding='utf-8') 
    print reader.fieldnames 
+0

https://github.com/jdunck/python-unicodecsv/issues/81 완전성을 위해. (2017 년 8 월에 발견되었고이 게시물을 보지 못했거나 이전에 링크했을 것입니다. 버그에 대한 의견 때문에) – Tanj