【发布时间】:2019-11-17 17:12:18
【问题描述】:
我正在尝试在不使用pandas 或xlrd 的情况下在python 中读取一个excel 文件,并且我一直在尝试将结果从bytes 转换为utf-8,但没有任何成功。
来自 xls 文件的数据
colA colB colC
spc 1D0 20190705
spd 1D0 20190705
spe 1D0 20190705
... (goes on for 500k lines)
代码
with open(file, 'rb') as f:
data = f.readlines(1) # Just to check the first line that is printed out
print(data[0].decode('utf-8'))
我收到的错误是UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid continuation byte
如果我不解码就打印data,结果是:[b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>\x00\x03\x00\xfe\xff\t\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x9dN\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\xfe\xff\xff\xff\x00\x00\x00\x00\xfeM\x00\x00\x01\x00\x00\x00\xffM\x00\x00\x00N\x00\x00\x01N\x00\x00\x02N\x00\x00\x03N\x00\x00\x04N\x00\x00\x05N\x00\x00\x06N\x00\x00\x07N\x00\x00\x08N\x00\x00\tN\x00\x00\n']
我没有任何理由不想使用pandas 或xlrd,我只是在需要时尝试仅使用标准库解析数据。
有什么想法吗?
【问题讨论】:
-
该错误表明 Excel 文件中有一个特定字符无法使用 'utf-8' 解码。尝试使用不同的编码器,但仍然不知道文档中可能潜伏着什么样的字符。也许,你应该试试 pandas:
pd.read_excel(file)看看你会得到什么。 -
Excel 是二进制格式,不是纯文本。如果您不想使用
xlrd或pd.read_excel,则必须重新实现这些库的功能。 -
即使你想解析比 .xls 容易得多的 .xlsx 文件,你仍然有很多工作要做。我猜你这样做是为了学习吗?如果是这样,那么我认为您应该查看this question 以了解在哪里可以阅读有关 .xlsx 规范的信息。如果您真的想了解 .xls 文件,我敦促您重新考虑。您还可以学习许多其他更有用、更不痛苦的东西。