python xlrd 不支持的格式,或者文件损坏。

2025-03-20 08:47:00
admin
原创
50
摘要:问题描述:我的代码: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 错误:Traceba...

问题描述:

我的代码:

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    radedStockStatus.py", line 18, in <module>
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls")
File "C:Python27libsite-packagesxlrd__init__.py", line 429, in open_workbook
biff_version = bk.getbof(XL_WORKBOOK_GLOBALS)
File "C:Python27libsite-packagesxlrd__init__.py", line 1545, in getbof
bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8])
File "C:Python27libsite-packagesxlrd__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:

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

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

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

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

解决方案 2:

你说:

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

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

解决方案 3:

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

解决方案 4:

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

>> import xlrd
>> xlrd.__VERSION__

如果您使用的是“0.9.0”,则可以打开几乎所有文件。如果您使用的是“0.6.0”(这是我在 Ubuntu 上发现的),则在处理最新的 Excel 文件时可能会遇到问题。您可以使用 Distutils 标准下载最新版本的 xlrd。

解决方案 5:

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

它非常有效,我现在使用 openpyxl 库来处理 .xlsx 文件,而不是打开 .xls。

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

解决方案 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()

解决方案 7:

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

解决方案 8:

就我而言,按照@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)

解决方案 9:

试试这个,它对我有用。

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

解决方案 10:

我也遇到了这个问题。我用 excel 打开了这个文件,然后将其保存为其他格式,例如 excel 97-2003,最后我解决了这个问题

解决方案 11:

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

解决方案 12:

当我尝试从文件夹中读取一些 XLSX 文件并且其中一个文件已打开时,出现此错误。我关闭了 XLSX 文件,此错误不再出现。

解决方案 13:

我刚刚下载了 xlrd,创建了一个 excel 文档(excel 2007)进行测试,并得到了同样的错误(消息显示“找到 PK”)。扩展名是 xlsx。尝试将其保存为较旧的 .xls 格式,错误消失......

解决方案 14:

我遇到了同样的问题。

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

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

解决方案 15:

处理了同样的问题,最终解决了这个问题,所以只说了我所做的事情。

观察 - 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:Usershitesh kumarPycharmProjectsOEM MLoutput.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)

解决方案 16:

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

解决方案 17:

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

解决方案 18:

正如他们已经写的那样,它实际上是 html,要查看第一个表格,你可以使用

df= pd.read_html(file)
df[0]

要查看有多少张表,您可以使用

print('Tables found:', len(df))

解决方案 19:

这对我有用,使用encoding="utf-8"来自这篇文章的
UnicodeDecodeError: 'charmap' 编解码器无法解码位置 100 中的字节 0x90: 字符映射到 <undefined>

    def convert_to_xlsx():
        with open('sample.xls', encoding="utf-8") 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()

解决方案 20:

melike 的答案对我有用,而最后的输出句子没有用,所以如果有人遇到与我相同的问题并想要将 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')]) 
        output_df = pd.DateFrame(sheet_as_list)
        output_df.to_excel(writer, sheet_name='sheet1',index=False, header=False)
        writer.close()

解决方案 21:

import os
import pandas as pd

# Rename the file if it's not already a .csv file
if not os.path.exists('3.8 locates.csv'):
    os.rename('3.8 locates.xls', '3.8 locates.csv')

# Load the data into a pandas dataframe
df = pd.read_csv("3.8 locates.csv", sep='    |
', engine='python')

# Show the first 5 rows of the dataframe
print(df.head())

代码导入 os 和 pandas 模块,然后使用它们执行以下操作:

  1. 检查文件“3.8locates.csv”是否存在。

  2. 如果不存在,它会将文件“3.8locates.xls”重命名为“3.8locates.csv”。

  3. 使用 pd.read_csv 方法将文件“3.8locates.csv”的内容加载到 Pandas 数据框中。sep 参数设置为“\t|\n”,engine 参数设置为“python”,以正确处理文件的分隔符。

  4. 使用 df.head() 方法打印数据框的前 5 行。注意:如果文件不是有效的制表符分隔或换行符分隔文件,代码可能无法按预期工作。

解决方案 22:

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

Simplistix github

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

解决方案 23:

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

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

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

解决方案 24:

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

wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls?raw=true")
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用