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

use*_*003 12 python csv excel 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
Run Code Online (Sandbox Code Playgroud)

它打印出这个错误

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'
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 23

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

  • 令人难以置信的是,他们不能坚持像"文件已经打开"这样的消息.让我想要诅咒!PS.谢谢! (4认同)
  • 这三句话为我节省了大量的时间和挫折! (3认同)

Mik*_*han 23

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

  • 这也发生在我身上。 (3认同)

jmc*_*ara 13

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

这有两个可能的原因:

  1. 您的xlrd版本已旧,不支持读取xlsx文件.
  2. XLSX文件已加密,因此以OLE化合物文档格式而不是zip格式存储,使其在xlrd中显示为旧格式的XLS文件.

仔细检查您实际上是否使用了最新版本的xlrd.在一个单元格中打开包含数据的新X​​LSX文件应该验证.

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

如果您明确应用工作簿密码,并且密码保护某些工作表元素,则XLSX文件将被加密.因此,即使您不需要密码来打开它,也可以拥有加密的XLSX文件.

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


Plu*_*uto 5

当xlsx文件实际上是html时,会出现此错误;您可以使用文本编辑器将其打开以进行验证。当我收到此错误时,我使用熊猫解决了它:

import pandas as pd
df_list = pd.read_html('filename.xlsx')
df = pd.DataFrame(df_list[0])
Run Code Online (Sandbox Code Playgroud)