错误:不支持的格式或损坏的文件:预期的BOF记录

时间:2013-05-12 07:00:39

标签: python excel csv xlrd

我正在尝试打开xlsx文件并打印它的内容。我一直遇到这个错误:

import xlrd
book = xlrd.open_workbook("file.xlsx")
print "The number of worksheets is", book.nsheets
print "Worksheet name(s):", book.sheet_names()
print

sh = book.sheet_by_index(0)

print sh.name, sh.nrows, sh.ncols
print

print "Cell D30 is", sh.cell_value(rowx=29, colx=3)
print

for rx in range(5):
    print sh.row(rx)
    print

打印出此错误

raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found    '\xff\xfeT\x00i\x00m\x00'

由于

9 个答案:

答案 0 :(得分:17)

还有第三个原因。文件已由Excel打开的情况。 它会产生相同的错误。

答案 1 :(得分:15)

也许是第四个原因,你使用read_excel来读取csv文件。 (那是发生在我身上的事情......)

答案 2 :(得分:12)

错误消息与XLS文件的BOF(文件开头)记录有关。但是,该示例显示您正在尝试读取XLSX文件。

这有两个可能的原因:

  1. 您的xlrd版本已旧,不支持读取xlsx文件。
  2. XLSX文件已加密,因此以OLE化合物文档格式存储,而不是zip格式,使其在xlrd中显示为旧格式的XLS文件。
  3. 仔细检查您实际上是否使用了最新版本的xlrd。在一个单元格中打开包含数据的新X​​LSX文件应该验证。

    但是,我猜你正在遇到第二个条件,并且文件已加密,因为你在上面说明你已经在使用xlrd版本0.9.2。

    如果您明确应用工作簿密码,则XLSX文件将被加密,但如果您使用密码保护某些工作表元素,则会对其进行加密。因此,即使您不需要密码来打开它,也可以使用加密的XLSX文件。

    更新:请参阅@ BStew,第三个,更可能的答案,该文件是由Excel打开的。

答案 3 :(得分:3)

当xlsx文件实际上是html时,你可以得到这个错误;您可以使用文本编辑器打开它来验证这一点。当我收到此错误时,我使用pandas解决了它:

import pandas as pd
df_list = pd.read_html('filename.xlsx')
df = pd.DataFrame(df_list[0])

答案 4 :(得分:2)

对于今天正在阅读这篇文章的任何人,以下解决方案实际上对我有帮助。 https://stackoverflow.com/a/46214958/9642876

我尝试读取的XLSX文件是由报告软件创建的,熊猫或xlrd均无法读取,但可以在Microsoft Excel中打开它。我用另一个名称重新保存了文件,现在xlrd和pandas都可以读取文件了。

即使您没有重新测试,也可以使用相同的名称保存它。

答案 5 :(得分:1)

在我的情况下,有人给了我一个扩展名为“ .xls”的Excel文件。我尝试使用xlrd进行解析,并收到此错误:

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found "blar blar blar"

工作一段时间后,我发现.xls文件实际上是一个文本文件。发件人不必费心创建一个真正的Excel二进制文件,而只是将“ .xls”放入文本文件中。

也许值得用文本编辑器打开文件以确保它是Excel文件。这样可以为我节省一个小时。

答案 6 :(得分:0)

就我而言,问题出在共享文件夹本身。

要点:我在WIN2012 Server上有一个共享文件夹,用户在其中放置.xlsx文件,然后使用我的python脚本将该xlsx文件加载到数据库表中。

即使用户删除了旧文件并将其放入要加载的文件中,BOF错误仍然在字节字符串中提及字节字符串和用户名-在xlsx文件内部没有位置在任何工作表中都有用户名。最重要的是,当我将.xlsx复制到一个新创建的文件夹并运行引用该新文件夹的脚本时,它就可以正常工作。

因此,最后,我删除了共享文件夹,并意识到即使我和用户只看到1个项目,也删除了5个项目。我认为这取决于我缺乏Windows管理技能,但这是罪魁祸首。

答案 7 :(得分:0)

我收到了相同的错误消息。我觉得这很奇怪,因为该脚本适用于另一个文件夹下的xlsx文件,并且这些文件几乎相同。

我仍然不知道为什么会这样。但是最后,我将所有的excel文件复制到另一个文件夹中,脚本正常工作。如果上述建议都不适合您,请尝试尝试...

答案 8 :(得分:0)

当脚本使用的文件也在后台打开时,也会发生这种情况。