【问题标题】:Python decoding excel sheet without pandas没有熊猫的Python解码excel表
【发布时间】:2019-11-17 17:12:18
【问题描述】:

我正在尝试在不使用pandasxlrd 的情况下在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']

我没有任何理由不想使用pandasxlrd,我只是在需要时尝试仅使用标准库解析数据。

有什么想法吗?

【问题讨论】:

  • 该错误表明 Excel 文件中有一个特定字符无法使用 'utf-8' 解码。尝试使用不同的编码器,但仍然不知道文档中可能潜伏着什么样的字符。也许,你应该试试 pandas:pd.read_excel(file) 看看你会得到什么。
  • Excel 是二进制格式,不是纯文本。如果您不想使用 xlrdpd.read_excel,则必须重新实现这些库的功能。
  • 即使你想解析比 .xls 容易得多的 .xlsx 文件,你仍然有很多工作要做。我猜你这样做是为了学习吗?如果是这样,那么我认为您应该查看this question 以了解在哪里可以阅读有关 .xlsx 规范的信息。如果您真的想了解 .xls 文件,我敦促您重新考虑。您还可以学习许多其他更有用、更不痛苦的东西。

标签: python excel utf-8


【解决方案1】:

试试这个

with open('D:\dew.csv','rt') as f:
#This will print every line one by one 
data = csv.reader(f)
for r in data:
    print(r) 
    f.close()

【讨论】:

  • 根据 OP 给出的描述(尽管它们没有具体说明),这似乎没有回答提出的问题。您的解决方案是针对基于文本的文件,OP 似乎在处理(假定的) .xls 或 .xlsx 文件。
【解决方案2】:

您需要先解压缩 xlsx 文件,然后才能读取其内容(假设这是您使用的格式)。

【讨论】:

  • 理想情况下,您应该展示一些代码如何执行此操作(例如,使用 std-lib zipfile 模块),然后在解压缩 xlsx 存档后如何继续(要处理哪个文件,如何访问单元格的数据等)
  • 在进入这样的企业之前等待确认 xlsx 确实是 OP 正在尝试读取的格式可能是明智的......
  • 另见this comment in another thread,提供了一种仅使用标准库功能读取 `*.xlsx* Excel 文件的解决方案。
猜你喜欢
  • 2020-10-19
  • 1970-01-01
  • 2020-08-24
  • 2022-07-19
  • 2019-02-28
  • 2020-02-12
  • 1970-01-01
  • 2018-04-23
  • 2021-03-25
相关资源
最近更新 更多