我用xlrd
来处理.xls文件,用openpyxl
来处理.xlsx文件,效果很好。
然后我得到一个表面上是.xls文件的文件,所以我尝试xlrd.open_workbook()
,得到:
XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '<?xml ve'
我看了一下this问题,我猜想我的文件虽然以扩展名.xls结尾,但实际上一定是.xlsx。实际上,我可以在文本编辑器中查看它:
<?xml version="1.0" encoding="UTF-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
:
:
:
(出于隐私原因,我不能发布整个文件,但我们的分析可能不需要它)。
所以我推测如果我把它复制到一个.xlsx上,我应该可以用openpyxl.load_workbook()
打开它,但是我得到:
BadZipfile: File is not a zip file
如果它实际上是一个xls(不太可能),但不能用xlrd
打开,如果它实际上是一个xlsx,但不能用openpyxl
打开,即使在Icp
到一个.xlsx之后,该怎么办?
注意:如果我在Excel中打开.xls,将其另存为.xlsx,然后用openpyxl
重试,它确实可以很好地加载,但这一手动步骤不是我在执行程序时所能拥有的奢侈。
我不在OSX上,所以这不是测试。尽管缺少支持,您仍然可以使用
appscript
包来打开有问题的文件并重新保存它。我也有类似的问题。结果它需要绝对的文件路径。E、 例如,“c:/dir/filename.xlsx”而不是“filename.xlsx”。相对路径适用于osx,但不适用于Windows。
有一点很清楚:您试图打开的文件的格式与扩展名建议的格式不同。
如您所知,Excel文件格式包括(但不限于)
xls
和xlsx
。Excel 2003格式(
xls
)是二进制格式。这意味着,如果用文本编辑器打开xls
文件,就会看到乱七八糟的内容。Excel 2007格式(
xlsx
)完全不同。xlsx
文件是一个zip文件,其中包含一堆XML文件。您可以使用zip archiver来提取xlsx
文件的内容。然后,可以使用任何文本编辑器编辑XML文件。然而,直接用文本编辑器打开一个xlsx
文件就像用文本编辑器打开一个zip
文件:你会看到一些乱七八糟的东西。您可以用文本编辑器打开文件(并读取其内容),这表明它既不是
xls
文件,也不是xlsx
文件。您的文件既不是二进制文件也不是zip文件,而是一个普通的XML文件。而且,这个错误信息说明了很多。
这意味着
openpyxl
试图将文件作为xlsx
文件打开,因此是zip
文件。但是当它试图提取其内容时,它失败了,因为您的文件甚至不是一个zip文件。但是,如果该文件既不是
xlsx
文件,也不是xls
文件,那么Microsoft Excel如何读取它?我也很好奇。经过一番研究,我相信你的档案里有XML Spreadsheet 2003 file format。This example看起来与您发布的文件内容非常相似。由于Microsoft Excel支持这种格式,难怪它可以读取您的文件。不幸的是,Python库如
xlrd
和openpyxl
只支持xls
和xlsx
文件格式,因此它们无法读取您的文件。我想你只需要手动将它转换成支持的格式。相关问题 更多 >
编程相关推荐