2012-03-08 216 views
15

我的代码:python xlrd不支持的格式或损坏的文件。

import xlrd 
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls") 
sh = wb.sheet_by_index(0) 
print sh.cell(0,0).value 

错误:

Traceback (most recent call last): 
File "Z:\Wilson\tradedStockStatus.py", line 18, in <module> 
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls") 
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 429, in open_workbook 
biff_version = bk.getbof(XL_WORKBOOK_GLOBALS) 
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1545, in getbof 
bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8]) 
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1539, in bof_error 
raise XLRDError('Unsupported format, or corrupt file: ' + msg) 
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; 
found '<table r'" 

的文件似乎并没有被破坏或者是不同的格式。 任何有助于找到问题根源的东西都会很棒。

+0

1.尝试更改文件名(在开头处丢失数字和空格)2.文件密码是否受到保护? – user850498 2012-03-08 19:49:22

+0

我试着用相同的结果改变文件名,并且文件没有密码保护。 – wDroter 2012-03-08 21:27:08

回答

19

你说:

The file doesn't seem to be corrupted or of a different format.

然而,随着错误消息指出,前8个字节的文件是'<table r' ...这绝对不是Excel的.xls格式。用文本编辑器(例如记事本)打开它,它不会注意到(错误的).xls扩展名并亲自查看。

+0

同样,如果我得到(我得到)一个类似的错误,但与* XLRDError:不支持的格式,或损坏的文件:预期BOF记录;发现'<?xml ve'*,这意味着我的* xls *确实是* xlsx *? – Pyderman 2015-07-03 17:22:34

+0

@Pyderman不,它不是一个xlsx文件。可以保存为XML Spreadsheet(* .xml)(不受xlrd支持) – 2017-01-11 00:30:03

0

我刚下载了xlrd,创建了一个用于测试的excel文档(excel 2007),并得到了相同的错误(消息说'找到了PK \ x03 \ x04 \ x14 \ x00 \ x06 \ x00')。扩展名是xlsx。试图将其保存为旧的.xls格式并且错误消失.....

-1

您的文件没有任何问题。 xlrd目前还不支持xlsx(excel 2007+)文件,尽管它声称已经支持了一段时间。

Simplistix github

2天前,他们犯了一个字母前的版本,他们的混帐于一体的XLSX支持。其他论坛建议您为xlsx文件使用DOM解析器,因为xlsx文件类型只是包含XML的zip文件。我没有试过这个。还有另一个与xlrd具有类似功能的软件包,这称为openpyxl,您可以从easy_install或pip获取它。我还没有尝试过,但是,它的API应该与xlrd类似。

+1

-1(1)他的文件以'

2012-04-15 23:38:29

+0

谢谢你的xlrd和建立对xlsx的支持,John! xlrd是恕我直言,用于处理excel文件的最佳python模块。如果我可以帮助支持你的工作金钱,否则,请让我知道... – GE420 2012-11-21 06:42:07

6

我有类似的问题,它与版本有关。在Python终端检查:

>> import xlrd 
>> xlrd.__VERSION__ 

如果你有“0.9.0”可以打开几乎所有的文件。如果您有我在Ubuntu上发现的'0.6.0',那么您可能在使用最新的Excel文件时遇到问题。您可以使用Distutils标准下载最新版本的xlrd。

+1

“可能有问题”是不准确的。 xlrd 0.6.0根本不处理xlsx文件。 0.6.0是不支持的古董。 – 2013-03-16 19:52:47

3

这将发生在一些文件,同时也在Excel中打开。

3

尝试与熊猫打开它:

import pandas as pd 
data=pd.read_html(filename.xls) 

或者尝试其他任何HTML解析器的Python。

这不是一个合适的excel文件,但可以用excel读取html。

+1

嗨我得到这个错误:ValueError:找不到表格 – biobirdman 2014-07-22 02:40:52

+1

嗨,用文本编辑器打开你的xls,看看它是否是html。如果你在第一个顶部出现错误,它是一个HTML。我不明白为什么如果你尝试使用read_html,你会得到一个“找不到表格”。 – foebu 2014-07-22 15:00:24

0

在我的情况下,用@ john-machin建议的文本编辑器打开文件后,我意识到文件没有加密,因为Excel文件应该是这样的,但它是以CSV格式存储的,并保存为Excel文件。我所做的是重命名的文件和它的推广和使用read_csv函数:

os.rename('sample_file.xls', 'sample_file.csv') 
csv = pd.read_csv("sample_file.csv", error_bad_lines=False) 
0

我遇到了同样的问题。

它位于.xls文件本身 - 它看起来像一个Excel文件,但它不是。 (看看你打开Excel中的.xls时是否弹出)

sjmachin评论于2013年1月19日从https://github.com/python-excel/xlrd/issues/26帮助。

1

我在下载.xls文件时发现了类似的问题,并使用xlrd库将其打开。然后我尝试了转换的.xls的溶液进入的.xlsx详见这里:how to convert xls to xlsx

它就像一个魅力,而不是打开的.xls,我与.xlsx文件的工作现在用openpyxl库。

希望它有助于解决您的问题。

0

我遇到了这个问题,通过too.I Excel中打开该文件并将其保存为其他格式,如Excel 97-2003最后我解决了这个问题

0

我有同样的问题。这些旧文件格式化为制表符分隔的文件。我已经能够用read_table打开我的问题文件;即df = pd.read_table('trouble_maker.xls')