【问题标题】:python xlrd unsupported format, or corrupt file.python xlrd 格式不受支持,或文件损坏。
【发布时间】:2012-03-26 06:04:16
【问题描述】:

我的代码:

import xlrd
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls")
sh = wb.sheet_by_index(0)
print sh.cell(0,0).value

错误:

Traceback (most recent call last):
File "Z:\Wilson\tradedStockStatus.py", line 18, in <module>
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls")
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 429, in open_workbook
biff_version = bk.getbof(XL_WORKBOOK_GLOBALS)
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1545, in getbof
bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8])
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1539, in bof_error
raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record;
found '<table r'"

文件似乎没有损坏或格式不同。 任何有助于找到问题根源的东西都会很棒。

【问题讨论】:

  • 1.尝试更改文件名(丢失开头的数字和空格) 2. 文件密码是否受保护?
  • 我尝试更改文件名,结果相同,但文件没有密码保护。

标签: python excel xlrd


【解决方案1】:

尝试使用 pandas 将其作为 HTML 打开:

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

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

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

【讨论】:

  • 你好,用文本编辑器打开你的xls,看看它是不是html。如果您在第一个顶部收到错误,则它是一个 html。我不明白为什么如果您尝试使用 read_html 会得到“找不到表”。
  • 这就是我的解决方案!谢谢!
【解决方案2】:

你说:

文件似乎没有损坏或格式不同。

但是正如错误消息所说,文件的前 8 个字节是 '&lt;table r' ...这绝对不是 Excel .xls 格式。使用不会注意到(不正确的).xls 扩展名的文本编辑器(例如记事本)打开它,然后自己查看。

【讨论】:

  • 出于同样的原因,如果我得到(并且我得到)一个类似的错误,但 XLRDError: Unsupported format, or corrupt file: Expected BOF record;找到',这意味着我的xls真的是一个xlsx
  • @Pyderman 不,它不是 xlsx 文件。可以保存为 XML 电子表格 (*.xml)(xlrd 不支持)
  • 谢谢 - 我将文件从 .csv 更改为 .xls 并且我的代码有效。
【解决方案3】:

某些文件在 Excel 中打开时也会发生这种情况。

【讨论】:

  • 我收到此错误消息,这确实是因为我在运行代码时打开了文件。谢谢。
  • 是的,你是对的!在我的例子中,文件扩展名是xls,但文件中的内容实际上是HTML...
  • 这也是我的问题
  • 这正是我的问题!另一个提醒我为什么在最坏的情况下我尝试坚持使用普通 CSV 或 ODS。
【解决方案4】:

我有类似的问题,它与版本有关。在 python 终端检查:

>> import xlrd
>> xlrd.__VERSION__

如果您有 '0.9.0',您几乎可以打开所有文件。如果您有我在 Ubuntu 上找到的 '0.6.0',那么您可能在使用最新的 Excel 文件时遇到问题。您可以使用 Distutils 标准下载最新版本的 xlrd。

【讨论】:

  • “可能有问题”不准确。 xlrd 0.6.0 根本不处理 xlsx 文件。 0.6.0 是不受支持的古董。
【解决方案5】:

我在下载 .xls 文件并使用 xlrd 库打开它时发现了类似的问题。然后我尝试了将 .xls 转换为 .xlsx 的解决方案,详见此处:how to convert xls to xlsx

它就像一个魅力,而不是打开 .xls,我现在正在使用 openpyxl 库处理 .xlsx 文件。

希望它有助于解决您的问题。

【讨论】:

  • 对不起,它没有帮助,因为错误'xlrd.open_workbook'和任何转换器都无法帮助,直到出现错误
【解决方案6】:

我遇到了同样的xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; 错误,并通过编写 XML 到 XLSX 转换器解决了它。原因是实际上,xlrd 不支持 XML 电子表格 (*.xml),即不支持 XLS 或 XLSX 格式。


import pandas as pd
from bs4 import BeautifulSoup

def convert_to_xlsx():
    with open('sample.xls') as xml_file:
        soup = BeautifulSoup(xml_file.read(), 'xml')
        writer = pd.ExcelWriter('sample.xlsx')
        for sheet in soup.findAll('Worksheet'):
            sheet_as_list = []
            for row in sheet.findAll('Row'):
                sheet_as_list.append([cell.Data.text if cell.Data else '' for cell in row.findAll('Cell')])
            pd.DataFrame(sheet_as_list).to_excel(writer, sheet_name=sheet.attrs['ss:Name'], index=False, header=False)

        writer.save()

【讨论】:

  • 这只是给了一个空白的 .xlsx 文件
【解决方案7】:

就我而言,按照@john-machin 的建议使用文本编辑器打开文件后,我意识到该文件没有像 Excel 文件那样加密,但它是 CSV 格式并保存为 Excel 文件。我所做的是重命名文件及其扩展名,并改用 read_csv 函数:

os.rename('sample_file.xls', 'sample_file.csv')
csv = pd.read_csv("sample_file.csv", error_bad_lines=False)

【讨论】:

  • 是的!当我使用 to_csv() 保存文件但将“.xlsx”作为文件格式传递时,我遇到了同样的错误(错误 yk)。
【解决方案8】:

我也遇到了这个问题,我用excel打开这个文件,保存为excel 97-2003等其他格式,终于解决了这个问题

【讨论】:

    【解决方案9】:

    我有同样的问题。这些旧文件的格式类似于制表符分隔的文件。我已经能够使用read_table 打开我的问题文件;即df = pd.read_table('trouble_maker.xls')

    【讨论】:

      【解决方案10】:

      我刚刚下载了 xlrd,创建了一个用于测试的 excel 文档 (excel 2007) 并得到了同样的错误(消息说 'found PK\x03\x04\x14\x00\x06\x00')。扩展名是 xlsx。尝试将其保存为较旧的 .xls 格式,错误消失了.....

      【讨论】:

        【解决方案11】:

        我遇到了同样的问题。

        它位于 .xls 文件本身 - 它看起来像一个 Excel 文件,但它不是。 (看看当你从 Excel 中直接打开 .xls 时是否有弹出窗口)

        sjmachin 于 2013 年 1 月 19 日从https://github.com/python-excel/xlrd/issues/26help 发表评论。

        【讨论】:

          【解决方案12】:

          解决了同样的问题,终于完成了这个问题,所以只是把我做了什么。

          观察 - 1 - 该文件实际上不是 XLS 我重命名为 txt 并注意到文件中的 HTML 文本。

          2 - 将文件重命名为 html 并尝试读取 pd.read_html,失败。

          3- 添加,因为它在 txt 文件中不存在,删除样式以确保表格从本地显示在浏览器中,并且工作。

          下面的代码可能对某人有帮助..

          import pandas as pd
          import os
          import shutil
          import html5lib
          import requests
          from bs4 import BeautifulSoup
          import re
          import time
          
          shutil.copy('your.xls','file.html')
          shutil.copy('file.html','file.txt')
          time.sleep(2)
          
          txt = open('file.txt','r').read()
          
          # Modify the text to ensure the data display in html page, delete style
          
          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)
          

          【讨论】:

            【解决方案13】:

            有时在文件路径末尾添加?raw=true 会有所帮助。例如:

            wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls?raw=true")
            

            【讨论】:

              【解决方案14】:

              在谷歌表格中打开,然后从表格下载为 CSV,然后重新上传到驱动器。然后你可以从 python 中打开 CSV 文件。

              【讨论】:

              • 能不能加一些参考链接
              【解决方案15】:

              当我尝试从一个文件夹中读取一些 XLSX 文件并且其中一个文件被打开时,我收到了这个错误。我关闭了 XLSX 文件,这个错误没有出现。

              【讨论】:

                【解决方案16】:

                它可能是旧的 excel 文件格式。它可以通过

                在 pandas 中读取为 html
                import pandas as pd
                df = pd.read_html('file.xls')
                

                最终,这会给出一个数据框列表(如果您检查类型是列表)。 https://pandas.pydata.org/pandas-docs/version/0.17.1/io.html#io-read-html

                您需要提取它们,例如使用df[0]

                【讨论】:

                  【解决方案17】:

                  我知道的两种方法是再次下载 xls 文件,如果您在 google colab 中执行此操作,只需从您的计算机再次加载文件并再次运行 pd.read_excel("filename,xlsx") .它应该可以工作。

                  【讨论】:

                    【解决方案18】:

                    您的文件没有问题。 xlrd 尚不支持 xlsx (excel 2007+) 文件,尽管据称它已经支持了一段时间。

                    Simplistix github

                    2 天前,他们向他们的 git 提交了一个 pre-alpha 版本,该版本集成了 xlsx 支持。其他论坛建议您对 xlsx 文件使用 DOM 解析器,因为 xlsx 文件类型只是一个包含 XML 的 zip 存档。我没有试过这个。还有另一个具有与 xlrd 类似功能的包,称为 openpyxl,您可以从 easy_install 或 pip 获得。这个我也没试过,不过它的API应该和xlrd类似。

                    【讨论】:

                    • -1 (1) 他的文件以'&lt;table r' 开头。它不是 XLSX 文件;以'PK' 开头的 ZIP 存档 (2) “其他论坛”建议他们没有尝试过或仅在小文件和/仅在他们自己的简单应用程序上工作的东西 (3) openpyxl 是 PHP 包的一个端口,并且它的 API 只能被疯狂猜测的人认为与 xlrd 相似。
                    • 感谢您对 xlrd 和构建对 xlsx 的支持,John! xlrd 是恕我直言,处理 excel 文件的最佳 python 模块。如果我可以在金钱上或其他方面帮助您的工作,请告诉我如何...
                    【解决方案19】:

                    我知道应该有适当的方法来解决它 但只是为了节省时间

                    我将我的 xlsx 表格上传到 Google 表格,然后再次从 Google 表格下载 它现在可以工作了

                    如果你没有时间解决问题,你可以试试这个

                    【讨论】:

                    • 在添加新问题之前,请查看已针对此问题提供的答案,尤其是在已有解决方案的情况下。
                    猜你喜欢
                    • 2019-08-16
                    • 2014-07-22
                    • 2018-01-23
                    • 2013-05-06
                    • 1970-01-01
                    • 2013-09-28
                    • 2019-01-28
                    • 1970-01-01
                    • 2013-12-24
                    相关资源
                    最近更新 更多