我尝试读取并打印以下文件:txt.tsv (https://www.sec.gov/files/dera/data/financial-statement-and-notes-data-sets/2017q3_notes.zip)
根据美国证券交易委员会的说法,该数据集以单一编码形式提供,具体如下:
制表符分割值(.txt):utf-8编码、以制表符分隔、以\n结尾的行,第一行包含小写字段名称。
我的当前代码:
import csv
with open('txt.tsv') as tsvfile:
reader = csv.DictReader(tsvfile, dialect='excel-tab')
for row in reader:
print(row)
所有尝试都以以下错误消息结束:
'utf-8'编解码器无法解码字节位置4276处的字节0xa0:起始字节无效
我有点困惑。 有人能帮我吗?
csv
模块在处理非ASCII字符时会出现问题。 - ShadowRangerutf-8
格式,因此您的输入文件可能不符合所描述的格式。话虽如此,您提供的文件看起来完全符合要求(就我了解的范围内它是纯ASCII码;它使用了一些不寻常的ASCII控制字符,但它们都在ASCII范围内),因此我不确定您何时会看到\xa0
字节。您是否有可能在使用该文件之前意外修改了它? - ShadowRangernewline=''
传递给open
。而且,在这里使用excel_tab
方言是错误的;它假设行结束符是\r\n
,而文件实际上是\n
结尾的。基于excel_tab
定义自己的方言将是一个简单的解决方案,只需子类化它并设置类级变量lineterminator = '\n'
即可。 - ShadowRanger