xlrd读取xls时出现XLRDError:不支持的格式或损坏的文件:期望的BOF记录; 找到'\r\n<html>

3 投票
3 回答
12508 浏览
提问于 2025-04-18 08:16

这是代码:

xls = open_workbook('data.xls')

返回的结果是:

File "/home/woles/P2/fin/fin/apps/data_container/importer.py", line 16, in import_data
  xls = open_workbook('data.xlsx')
File "/home/woles/P2/fin/local/lib/python2.7/site-packages/xlrd/__init__.py", line 435,     in open_workbook
ragged_rows=ragged_rows,
File "/home/woles/P2/fin/local/lib/python2.7/site-packages/xlrd/book.py", line 91, in open_workbook_xls
biff_version = bk.getbof(XL_WORKBOOK_GLOBALS)
File "/home/woles/P2/fin/local/lib/python2.7/site-packages/xlrd/book.py", line 1230, in getbof
bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8])
File "/home/woles/P2/fin/local/lib/python2.7/site-packages/xlrd/book.py", line 1224, in bof_error
raise XLRDError('Unsupported format, or corrupt file: ' + msg)
XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '\r\n<html>'

文件没有损坏,我可以用Excel和LibreOffice打开它。

3 个回答

0

对于 .xls 文件,你可以使用 read_excel() 这个函数:

import pandas as pd
df1= pd.read_excel("filename.xls")

参数 headersep 可能会帮助你解决一些错误(这里可以找到关于这些参数的更多信息)。下面是一个使用的例子:

df2= pd.read_excel("filename.xls",  header = None, sep='delimiter')

注意,如果文件是 .csv 格式,你会遇到这个错误:

XLRDError: 不支持的格式,或者文件损坏:期望的 BOF 记录;

要读取 .csv 文件,需要使用 read_csv(),像这样:

df3= pd.read_csv("filename.csv")
0

我刚刚解决了同样的错误,第一步是把文件改成文本格式,然后查看里面的HTML内容。接着我做了一些修改,确保当我把它保存为HTML文件并在浏览器中打开时,表格能够显示出来。然后我用Beautiful Soup和pandas帮我生成了Excel输出……

看看下面的代码,可能会对你有帮助……

import pandas as pd
import os
import shutil
import html5lib
import requests
from bs4 import BeautifulSoup
import re
import time

shutil.copy('donloaded.xls','changed.html')
shutil.copy('changed.html','txt_output.txt')
time.sleep(2)

txt = open('txt_output.txt','r').read()

# Modify the text to ensure the data display in html page

txt = str(txt).replace('<style> .text { mso-number-format:\@; } </script>','')

# Add head and body if it is not there in HTML text

txt_with_head = '<html><head></head><body>'+txt+'</body></html>'

# Save the file as HTML

html_file = open('output.html','w')
html_file.write(txt_with_head)

# Use beautiful soup to read

url = r"C:\Users\hitesh kumar\PycharmProjects\OEM ML\output.html"
page = open(url)
soup = BeautifulSoup(page.read(), features="lxml")
my_table = soup.find("table",attrs={'border': '1'})

frame = pd.read_html(str(my_table))[0]
print(frame.head())
frame.to_excel('testoutput.xlsx',sheet_name='sheet1', index=False)
1

试着用pandas打开它:

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

或者试试其他的html解析工具。

这不是一个真正的excel文件,而是一个可以用excel读取的html文件。

撰写回答