47

我的代码:

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'"

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

4

20 回答 20

53

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

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

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

这不是一个合适的 excel 文件,而是一个用 excel 可读的 html。

于 2014-07-13T17:02:11.130 回答
39

你说:

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

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

于 2012-03-09T09:14:07.357 回答
16

这将发生在某些文件上,同时也在 Excel 中打开。

于 2013-06-26T20:16:35.847 回答
8

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

>> import xlrd
>> xlrd.__VERSION__

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

于 2013-03-15T16:09:51.013 回答
6

我在下载 .xls 文件并使用 xlrd 库打开它时发现了类似的问题。然后我尝试了将 .xls 转换为 .xlsx 的解决方案,如下所述:如何将 xls 转换为 xlsx

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

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

于 2016-01-05T09:53:42.827 回答
5

我遇到了同样的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()

于 2020-07-21T14:31:32.963 回答
3

就我而言,在使用@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)
于 2015-07-09T13:02:49.703 回答
1

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

于 2018-03-01T04:05:39.190 回答
1

它可能是旧的 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]

于 2021-09-25T18:00:18.533 回答
1

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

于 2016-08-04T08:38:59.383 回答
0

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

于 2012-03-18T16:02:14.707 回答
0

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

于 2021-08-24T05:59:56.087 回答
0

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

于 2020-10-29T16:31:17.207 回答
0

我遇到同样的问题。

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

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

于 2015-07-23T04:24:10.293 回答
0

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

于 2021-11-06T03:41:10.307 回答
0

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

wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls?raw=true")
于 2020-07-28T22:07:46.143 回答
0

试试这个它对我有用。

import pandas as pd
data = pd.read_csv('filename.xls')
于 2022-01-23T09:11:44.207 回答
0

在同一个问题上工作,最后完成了这个问题,所以只是把我做了什么。

观察 - 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)
于 2020-01-25T09:17:52.867 回答
-1

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

简单的github

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

于 2012-04-15T05:18:55.840 回答
-1

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

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

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

于 2020-01-15T12:45:28.670 回答