我的代码:
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'"
该文件似乎没有损坏或格式不同。 任何有助于找到问题根源的事情都会很棒。
答案 0 :(得分:27)
你说:
该文件似乎没有损坏或格式不同。
但是,正如错误消息所示,文件的前8个字节是'<table r'
...这绝对不是Excel .xls
格式。使用文本编辑器(例如记事本)打开它,不会注意到(不正确的).xls
扩展名并自行查看。
答案 1 :(得分:14)
尝试用pandas打开它:
import pandas as pd
data = pd.read_html('filename.xls')
或尝试任何其他html python解析器。
这不是一个合适的excel文件,而是一个可以用excel读取的HTML。
答案 2 :(得分:8)
我有一个类似的问题,它与版本有关。在python终端检查:
>> import xlrd
>> xlrd.__VERSION__
如果您有'0.9.0',则可以打开几乎所有文件。如果你有'0.6.0'这是我在Ubuntu上发现的,你可能会遇到最新的Excel文件问题。您可以使用Distutils标准下载最新版本的xlrd。
答案 3 :(得分:5)
在Excel中也会打开一些文件。
答案 4 :(得分:3)
我在下载.xls文件时发现了类似的问题,并使用xlrd库打开它。然后我尝试了将.xls转换为.xlsx的解决方案,详见此处:how to convert xls to xlsx
它就像一个魅力,而不是打开.xls,我现在使用.xlsx文件使用openpyxl库。
希望它有助于解决您的问题。
答案 5 :(得分:1)
在我的情况下,在用@ 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)
答案 6 :(得分:1)
我曾经遇到同样的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()
答案 7 :(得分:0)
我刚刚下载了xlrd,创建了一个excel文档(excel 2007)进行测试并得到了同样的错误(消息显示'找到PK \ x03 \ x04 \ x14 \ x00 \ x06 \ x00')。扩展名是xlsx。尝试将其保存为较旧的.xls格式并且错误消失.....
答案 8 :(得分:0)
我遇到了同样的问题。
它位于.xls文件本身 - 它看起来像一个Excel文件,但它不是。 (当您从Excel中清楚地打开.xls时,查看是否弹出窗口)
sjmachin于2013年1月19日从https://github.com/python-excel/xlrd/issues/26帮助评论。
答案 9 :(得分:0)
我也遇到了这个问题。我用excel打开这个文件并保存为其他格式,如excel 97-2003,最后我解决了这个问题
答案 10 :(得分:0)
我有同样的问题。这些旧文件的格式类似于制表符分隔文件。我已经能够使用read_table
打开我的问题文件;即df = pd.read_table('trouble_maker.xls')
。
答案 11 :(得分: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)
答案 12 :(得分:0)
有时可以帮助在文件路径的末尾添加?raw=true
。例如:
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls?raw=true")
答案 13 :(得分:0)
在Google工作表中打开,然后以CSV格式从工作表下载,然后重新上传至驱动器。然后,您可以从python打开CSV文件。
答案 14 :(得分:-1)
您的文件没有任何问题。 xlrd尚不支持xlsx(excel 2007+)文件,尽管它声称已经支持了一段时间。
2天前,他们为他们的git提供了一个pre-alpha版本,它集成了xlsx支持。其他论坛建议您对xlsx文件使用DOM解析器,因为xlsx文件类型只是包含XML的zip存档。我没试过这个。还有另一个与xlrd具有类似功能的软件包,这个名为openpyxl,你可以从easy_install或pip获得。我也没有尝试过,但是,它的API应该类似于xlrd。
答案 15 :(得分:-1)
我知道应该有解决的办法 只是为了节省时间
我将自己的xlsx表格上传到Google表格,然后再次从Google表格下载了它 现在可以正常工作
如果您没有时间解决问题,可以尝试一下