Python pandas 无法读取带有一些奇怪编码和分割窗格的旧 Excel 文件

2023-12-29

我正在尝试将旧的 Excel 文件导入 pandas。该文件是由 CropSyst 软件使用旧格式(我不知道)生成的,并且默认情况下具有分割窗格。这是快照

一个解决方案可能是用excel打开文件并将其保存在xlsx中:这样pandas可以毫无问题地读取它,但我必须处理大量文件(> 40000),所以这是不可行的。

当尝试用 pandas 导入它时

pd.read_excel(filename)

我收到这个错误

error: unpack requires a string argument of length 3
*** No CODEPAGE record, no encoding_override: will use 'ascii'

我也尝试将其导入为 csv

pd.read_csv(filename)

但它只读取一些数据,我尝试使用行分隔符和单元格分隔符的不同组合,但没有成功。

你有什么建议吗?

EDIT

正如 @jmcnamara 在评论中所建议的,我尝试使用 Python 中可用的所有编码来覆盖文件的编码,但仍然没有运气:它无法正确解析文件。

可以在这里下载 xls 文件之一

https://drive.google.com/file/d/0B5smcFuBd6EtdFE5eEktZXZVTkU/view?usp=sharing https://drive.google.com/file/d/0B5smcFuBd6EtdFE5eEktZXZVTkU/view?usp=sharing


文件的格式为 Excel 2 (BIFF2)。

但是,由于它不是由 Excel 创建的,因此似乎与 Excel BIFF2 规范不一致。

对于您显示的文件,WINDOW2 记录不正确。您可以通过获取当前版本来解决此问题xlrd(0.9.3) 并应用以下补丁:

diff --git a/xlrd/sheet.py b/xlrd/sheet.py
index 36438a0..6d895c4 100644
--- a/xlrd/sheet.py
+++ b/xlrd/sheet.py
@@ -1455,7 +1455,8 @@ class Sheet(BaseObject):
                     (self.first_visible_rowx, self.first_visible_colx,
                     self.automatic_grid_line_colour,
                     ) = unpack("<HHB", data[5:10])
-                    self.gridline_colour_rgb = unpack("<BBB", data[10:13])
+                    if data_len > 10:
+                        self.gridline_colour_rgb = unpack("<BBB", data[10:13])
                     self.gridline_colour_index = nearest_colour_index(
                         self.book.colour_map, self.gridline_colour_rgb, debug=0)
                     self.cached_page_break_preview_mag_factor = 0 # default (60%)

然后安装此版本的模块或从您的PYTHONPATH因为 pandas 使用xlrd读取 Excel 文件。

这仍然会给出代码页警告,但这只是一个警告,您可以使用encoding_override='ascii'(或者任何正确的编码,但 ascii 可能是正确的)。

请注意,鉴于您有 40,000 个文件,文件格式可能存在其他问题,但这是我在您提供的文件中找到的唯一一个。

Update:根据第二个示例文件,编码似乎是 Windows CP-1252,因此以下内容应该有效:

import xlrd 

workbook = xlrd.open_workbook('harvest.xls', encoding_override='cp1252') 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python pandas 无法读取带有一些奇怪编码和分割窗格的旧 Excel 文件 的相关文章

随机推荐

  • java中如何将日期时间转换为时间戳

    论坛会员 我在 java 中遇到一个日期时间问题 实际上我正在收到开始日期格式为 2012 02 27T01 10 10我想将收到的日期插入到具有日期时间数据类型的数据库中 实际上我尝试通过下面的代码将收到的开始日期转换为日期时间 Stri
  • Android Eclipse Lint API 检查

    谢谢 P T 看起来像是问题的正确答案在 Eclipse 中构建多 SDK Android 应用程序而不会丢失编译时检查 https stackoverflow com questions 7642249 但是 当我尝试按照建议使用 Tar
  • 读取 spacy 中的文本文件语料库

    我看到的使用 spacy 的所有示例都只是在单个文本文件 尺寸很小 中读取 如何将文本文件语料库加载到 spacy 中 我可以通过腌制语料库中的所有文本来使用 textacy 来做到这一点 docs textacy io spacy rea
  • Azure Blob、文件和磁盘存储

    快问 我已经阅读了大量有关 azure blob 文件 磁盘存储选项的信息 并且我有一个如此简单的存储要求 以至于我对最佳选择感到困惑 我正在阅读的大部分信息都完全超出了我的理解范围 我希望有人能够将视野缩小到更合理的优点 缺点 我的情况如
  • 快速排序与堆排序

    快速排序和堆排序都进行就地排序 哪个更好 首选哪种应用和案例 堆排序是 O N log N 保证的 这比快速排序中最坏的情况要好得多 堆排序不需要更多内存来让另一个数组像合并排序那样放置有序数据 那么为什么商业应用程序坚持使用快速排序呢 与
  • update_or_create 与 ManyToManyField

    我有 2 个模型 如下所示 class Subs models Model tag models CharField max length 100 class Users models Model name models CharField
  • ReactforwardRef 含义

    我不明白这有什么意义 const FancyButton React forwardRef props ref gt
  • 如何使用 ffmpeg 批量/顺序下载 m3u8 文件?

    我目前在 Mac 上使用以下命令单独下载 m38u 播放列表 ffmpeg i lt URL with m3u8 gt codec copy output ts 如果我想处理多个文件 我目前可以通过单独的终端窗口进行操作 我想做的是 在一个
  • Python 使用正则表达式替换

    例如 有谁知道如何将所有出现的 lt 20 应该转化为 r n lt 20 but gt HELLO lt asassdsa 应该保持不变 gt gt gt import re gt gt gt str lt 20 gt gt gt out
  • Angular Elements 和 Stencil 的技术概念

    技术概念是角元素 and Stencil相似的 角元素将是 Angular 6 中的一个新功能 您基本上可以将编写的 Angular 组件包装为 Web 组件 根据我的理解 生成的自定义元素只是通往 Angular 的桥梁 因此我们仍然必须
  • Maven 使用 git 发布插件,如果在处理过程中推送提交,则会出现错误

    我们使用 git 存储库和 Maven 发布插件 在第一个构建步骤中 我们将所有更改提取到本地存储库 然后在下一个构建步骤中运行mvn release prepare release perform release prepare更新工作区
  • 如何以编程方式修改 Open/Libreoffice odt 文档?

    我想在我的应用程序中使用 OO LO PDF 生成功能 为此 我需要能够从代码中修改之前生成的 odt 模板 修改只是简单的文本替换 甚至不需要正则表达式 OO 开发者指南 https wiki openoffice org wiki Do
  • TypeError:“Tensor”对象不支持 TensorFlow 中的项目分配

    我尝试运行这段代码 outputs states rnn rnn lstm cell x initial state initial state sequence length real length tensor shape output
  • 在 ORMLite 中为一个类创建多个表

    我在 Android 上使用 ORMLite 并有以下问题 是否可以基于单个 Java 类创建多个表 这些表应该仅在名称上有所不同 并且应该通过名称访问它们 例如 如果我有一堂课 public class Order DatabaseFie
  • 标签和文本块之间的区别

    根据训练套件 两者有什么区别Label控制和TextBlock控制 因为两者都是内容控件并且只显示文本 TextBlock 不是控件 虽然TextBlock位于 System Windows Controls 命名空间中 它不是一个控件 它
  • scipy.io:无法写入 wavfile

    我在将 2d numpy 数组写入波形文件 音频 时遇到问题 根据文档我应该写一个 2d int16 numpy 数组 https docs scipy org doc scipy 0 18 1 reference generated sc
  • 使用 PHP 进行树形图可视化?

    除了 PHP 之外 几乎所有语言似乎都有 TreeMap 的示例 有人有一些基本代码的链接吗 http www neurofuzzy net 2006 04 28 treemap php source code http www neuro
  • 向 DOM Element 对象添加属性有什么问题?

    我一直在寻找一个直接的答案 我可以想到很多可能性 但我想知道真正的原因 jQuery 提供了 data 方法来将数据与 DOM Element 对象关联起来 是什么使得这有必要 直接向 DOM 元素对象添加属性 或方法 是否存在问题 它是什
  • 使用 CUDA 并行实现多个 SVD

    我是使用 GPU 并行编程的新手 因此如果问题广泛或模糊 我深表歉意 我知道 CULA 库中有一些并行 SVD 函数 但是如果我有大量相对较小的矩阵需要分解 应该采取什么策略 例如我有n有维数的矩阵d n很大并且d是小 如何并行化这个过程
  • Python pandas 无法读取带有一些奇怪编码和分割窗格的旧 Excel 文件

    我正在尝试将旧的 Excel 文件导入 pandas 该文件是由 CropSyst 软件使用旧格式 我不知道 生成的 并且默认情况下具有分割窗格 这是快照 一个解决方案可能是用excel打开文件并将其保存在xlsx中 这样pandas可以毫