我尝试阅读并打印以下文件:txt.tsv(https://www.sec.gov/files/dera/data/financial-statement-and-notes-data-sets/2017q3_notes.zip)
根据SEC,数据集以单一编码提供,如下所示:
制表符分隔值(.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:无效的起始字节
我有点失落。谁能帮我?非常感谢提前。
答案 0 :(得分:13)
文件中的编码是' windows-1252'。使用:
open('txt.tsv', encoding='windows-1252')
答案 1 :(得分:2)
如果有人使用土耳其数据,那么我建议这一行:
df = pd.read_csv("text.txt",encoding='windows-1254')
答案 2 :(得分:0)
我对.csv文件有相同的错误消息,这对我有用:
df = pd.read_csv('Text.csv',encoding='ANSI')
答案 3 :(得分:0)
ds = pd.read_csv('/Dataset/test.csv', encoding='windows-1252')
对我来说很好,谢谢。
答案 4 :(得分:0)
如果输入有一个杂散的 '\xa0'
,那么它不是 UTF-8,句号。
是的,您必须将其重新编码为 UTF-8(请参阅:iconv
、recode
命令,或者很多文本编辑器和 IDE 都可以这样做),或者使用 8 -bit 编码(正如所有其他答案所建议的那样)。
您应该问自己 - 这个字符到底是什么(0xa0
或 160)?
嗯,在许多 8 位编码中,它是一个不间断空格(如 HTML 中的
)。对于至少一种 DOS 编码,它是一个带重音的“a”字符。这就是为什么您需要查看从 8 位编码解码的结果。
顺便说一句,有时人们会说“UTF-8”,他们的意思是“我猜主要是 ASCII”。如果这是一个不间断的空间,它们就不会那么远:
In [1]: '\xa0'.encode()
Out[1]: b'\xc2\xa0'
在 '\xc2'
字节之前添加一个额外的字节即可。