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

使用Pandas读取URL中Excel文件时触发AssertionError求助

解决Pandas读取特定XLS文件触发AssertionError的批量处理方案

问题根源

你遇到的AssertionError来自xlrd库解析Excel共享字符串表(SST)时的校验失败,这类文件通常是老旧系统生成的非标准二进制XLS文件,xlrd无法兼容,但Office打开时会自动修复格式问题,因此重新保存后可正常读取。

批量处理解决方案

方案1:调用Office自动修复并读取(Windows环境)

利用pywin32调用Excel后台打开文件并重新保存,完全模拟手动修复的效果,适合批量处理。

首先安装依赖:

pip install requests pywin32 pandas

代码实现:

import requests
import win32com.client as win32
import os
import pandas as pd

def batch_fix_xls(url_list):
    results = []
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    excel.Visible = False  # 后台静默运行
    
    try:
        for idx, url in enumerate(url_list):
            temp_file = f"temp_{idx}.xls"
            fixed_file = f"fixed_{idx}.xls"
            
            # 下载文件到本地临时路径
            req = requests.get(url)
            with open(temp_file, 'wb') as f:
                f.write(req.content)
            
            # 打开并修复保存
            wb = excel.Workbooks.Open(os.path.abspath(temp_file))
            wb.SaveAs(os.path.abspath(fixed_file), FileFormat=56)  # 56对应标准XLS格式
            wb.Close()
            
            # 读取修复后的文件
            df = pd.read_excel(fixed_file)
            results.append(df)
            
            # 清理临时文件
            os.remove(temp_file)
            os.remove(fixed_file)
    finally:
        excel.Quit()  # 确保Excel进程关闭
    
    return results

# 使用示例:传入批量URL列表
url_list = [
    'https://apps.fomento.gob.es/BoletinOnline2/sedal/34010110.XLS',
    # 其他需要处理的URL
]
dfs = batch_fix_xls(url_list)

方案2:尝试更换Excel解析引擎

部分文件后缀为XLS,但实际是XLSX格式,可尝试用openpyxl或pyxlsb引擎读取,无需依赖Office,跨平台可用。

首先安装依赖:

pip install pandas openpyxl pyxlsb

代码实现:

import pandas as pd

def read_xls_with_alternative_engines(url):
    # 先尝试openpyxl(针对XLSX伪装成XLS的情况)
    try:
        return pd.read_excel(url, engine='openpyxl')
    except Exception:
        # 再尝试pyxlsb(针对二进制XLS的兼容)
        return pd.read_excel(url, engine='pyxlsb')

# 使用示例
df = read_xls_with_alternative_engines('https://apps.fomento.gob.es/BoletinOnline2/sedal/34010110.XLS')
print(df.head())

方案3:使用xlrd分支版本修复解析问题

官方xlrd已停止维护旧版XLS格式,可尝试使用社区维护的xlrd2分支,它修复了部分格式解析bug。

安装替换xlrd:

pip uninstall xlrd -y
pip install xlrd2

之后直接用原代码读取即可:

import pandas as pd

df = pd.read_excel('https://apps.fomento.gob.es/BoletinOnline2/sedal/34010110.XLS')

方案选择建议

  • Windows环境批量处理:优先方案1,完全匹配Office修复效果,兼容性最好。
  • 跨平台需求:先尝试方案2,若无效再使用方案3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:50:36