【问题标题】:xlrd reading xls XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '\r\n<html>'xlrd 读取 xls XLRDError:不支持的格式,或损坏的文件:预期的 BOF 记录;找到 '\r\n<html>'
【发布时间】:2014-07-22 13:27:34
【问题描述】:

这是代码:

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 打开它。

【问题讨论】:

  • 文件不一定损坏,但不支持。 Excel 可以打开很多 xlrd 不支持的东西,例如 CSV、SYLK、DIF 等等。错误消息告诉您它确实 找到了什么这一事实是它真正 是什么类型的文件的线索。这绝对不是真正的 XLSX 文件,只是一个名字而已。

标签: python excel dataframe xls xlrd


【解决方案1】:

尝试用 pandas 打开它:

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

或者尝试任何其他 html python 解析器。

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

【讨论】:

    【解决方案2】:

    我刚刚解决了同样的错误,第一步 id 检查将文件更改为文本并注意 html 内容,然后进行一些修改以确保一旦我将其保存为 HTML 并在浏览器中打开,表格应该是可见的。 Than 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)
    

    【讨论】:

      【解决方案3】:

      对于.xls 文件,您可以使用read_excel()

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

      参数headersep 可以帮助您摆脱一些错误(here you can find more info on the parameters)。使用示例

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

      注意如果文件是.csv,你会得到错误

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

      阅读.csv需要使用read_csv(),像这样

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

      【讨论】:

        猜你喜欢
        • 2019-08-16
        • 2021-11-30
        • 2018-01-23
        • 1970-01-01
        • 2013-05-06
        • 2019-01-28
        • 2012-03-26
        • 1970-01-01
        • 2021-05-09
        相关资源
        最近更新 更多