You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter notebook中读取伪装为Excel的Web Archive格式文件

报错原因
  • XLRDError:你的文件并非标准二进制XLS格式,本质是MIME封装的Web Archive单文件网页,pandas.read_excel 依赖的xlrd库只能识别标准XLS文件的开头BOF记录,无法解析网页格式内容。
  • AttributeError:pandas.read_html的返回值为列表结构,列表中每个元素对应网页内的一个表格的DataFrame对象,不能直接对列表调用DataFrame专属的head()方法。
解决方法

方案1:直接读取(适用于大部分场景)

这类Excel导出的网页格式文件通常页面内仅包含一个业务表格,直接取read_html返回列表的第一个元素即可:

import pandas as pd

# 读取文件得到表格列表
table_list = pd.read_html("你的目标文件.xls")
# 取第一个表格即为目标数据
df = table_list[0]
# 可正常调用DataFrame方法
df.head()

如果文件内存在多个表格,可遍历列表确认你需要的表格索引:

for idx, table in enumerate(table_list):
    print(f"第{idx}个表格前5行:")
    display(table.head())
    print("-"*50)

方案2:先解析MIME封装再读取(适用于方案1失效的场景)

如果是标准multipart/related封装的Web Archive文件,需要先提取封装内的HTML内容再解析表格:

import email
from email.policy import default
import pandas as pd
from io import StringIO

# 读取源文件解析MIME结构
with open("你的目标文件.xls", "r", encoding="utf-8") as f:
    msg = email.message_from_string(f.read(), policy=default)

# 遍历MIME分段提取HTML内容
html_content = ""
for part in msg.walk():
    if part.get_content_type() == "text/html":
        html_content = part.get_content()
        break

# 解析HTML内的表格
df = pd.read_html(StringIO(html_content))[0]
df.head()

提示:如果读取时出现编码报错,可将open函数的encoding参数改为gbk或gb2312尝试,Windows平台导出的这类文件常使用中文编码。

拿到df对象后,即可正常执行删除列、筛选、复制等pandas常规数据操作,和Excel打开的表格结构完全一致。

内容的提问来源于stack exchange,提问作者Ian Weng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:45:00