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

Python 错误:不支持的格式或损坏的文件:预期的BOF记录,python,excel,csv,xlrd,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.nco

我正试图打开一个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
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found "blar blar blar"
它会打印出这个错误

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'

谢谢

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

这可能有两个原因:

  • 您的xlrd版本很旧,不支持读取xlsx文件
  • XLSX文件经过加密,因此存储为OLE复合文档格式,而不是zip格式,使xlrd将其视为旧格式的XLS文件
  • 仔细检查您是否正在使用xlrd的最新版本。在一个单元格中打开一个包含数据的新XLSX文件应该可以验证这一点

    但是,我猜您遇到了第二种情况,并且该文件是加密的,因为您在上面声明您已经在使用xlrd版本0.9.2

    如果显式应用工作簿密码,并且密码保护某些工作表元素,则XLSX文件将被加密。因此,即使不需要密码就可以打开加密的XLSX文件


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

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

    如果使用
    读取excel()
    来读取
    .csv
    ,则会出现错误

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

    要阅读
    .csv
    需要使用
    read\u csv()
    ,如下所示

    df1= pd.read_csv("filename.csv")
    

    当xlsx文件实际上是html时,可能会出现此错误;您可以使用文本编辑器打开它来验证这一点。当我遇到这个错误时,我用熊猫解决了它:

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

    在我的例子中,问题在于共享文件夹本身

    举个例子:我在WIN2012服务器上有一个共享文件夹,用户在其中删除.xlsx文件,然后使用我的python脚本将该xlsx文件加载到数据库表中

    即使用户删除了旧文件并将其放入要加载的文件中,BOF错误仍会在字节字符串中不断提到一个字节字符串和用户的名称——在任何工作表的xlsx文件中,用户的名称都不存在。最重要的是,当我将.xlsx复制到一个新创建的文件夹中并运行引用该新文件夹的脚本时,它工作了


    因此,最后,我删除了共享文件夹,并意识到有5个项目被删除,即使只有1个项目对我和用户可见。我认为这是因为我缺乏windows管理技能,但这是罪魁祸首。

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


    我还是不知道为什么会这样。但最后,我将所有excel文件复制到另一个文件夹,脚本正常工作。如果以上建议都不适用,您可以尝试……

    在我的例子中,有人给了我一个以扩展名“.xls”结尾的Excel文件。我尝试使用解析它,但出现以下错误:

    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
    
    xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found "blar blar blar"
    
    工作了一段时间后,我发现.xls文件实际上是一个文本文件。发件人没有费心创建一个真正的Excel二进制文件,只是将“.xls”放在一个文本文件中


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

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

    对于今天阅读本文的任何人,以下解决方案实际上对我有所帮助。

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


    如果您使用相同的名称重新保存,它也可能会起作用,尽管我还没有测试过。

    您的xlrd版本是什么?9.2我相信这是我最新的版本,它是一个编码问题,这解决了它:这三句话为我节省了大量时间和挫折!感谢它的工作:)-->df1=pd.read\u csv(“filename.csv”)