wDr*_*ter 25 python excel xlrd
我的代码:
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
Run Code Online (Sandbox Code Playgroud)
错误:
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'"
Run Code Online (Sandbox Code Playgroud)
该文件似乎没有损坏或格式不同.任何有助于找到问题根源的事情都会很棒.
Joh*_*hin 29
你说:
该文件似乎没有损坏或格式不同.
但是,正如错误消息所示,文件的前8个字节是'<table r'......绝对不是Excel .xls格式.使用文本编辑器(例如记事本)打开它,不会注意到(不正确的).xls扩展名并亲自查看.
foe*_*ebu 19
尝试用熊猫打开它:
import pandas as pd
data = pd.read_html('filename.xls')
Run Code Online (Sandbox Code Playgroud)
或者尝试任何其他html python解析器.
这不是一个合适的excel文件,而是一个可读的excel文件.
小智 8
我有类似的问题,它与版本有关.在python终端检查:
>> import xlrd
>> xlrd.__VERSION__
Run Code Online (Sandbox Code Playgroud)
如果你有'0.9.0',你几乎可以打开所有文件.如果你有'0.6.0'这是我在Ubuntu上发现的,你可能会遇到最新的Excel文件问题.您可以使用Distutils标准下载最新版本的xlrd.
小智 6
我在下载 .xls 文件并使用 xlrd 库打开它时发现了类似的问题。然后我尝试了将 .xls 转换为 .xlsx 的解决方案,详细如下:how to convert xls to xlsx
它就像一个魅力,而不是打开 .xls,我现在使用 openpyxl 库处理 .xlsx 文件。
希望它有助于解决您的问题。
我遇到了同样的xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record;错误,并通过编写 XML 到 XLSX 转换器来解决它。原因是实际上,xlrd 不支持 XML Spreadsheet (*.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()
Run Code Online (Sandbox Code Playgroud)
它可能是旧的 Excel 文件格式。它可以通过 pandas 读取为 html
import pandas as pd
df = pd.read_html('file.xls')
Run Code Online (Sandbox Code Playgroud)
最终,这给出了数据帧列表(如果您检查类型是列表)。https://pandas.pydata.org/pandas-docs/version/0.17.1/io.html#io-read-html
您需要提取它们,例如使用df[0]