使用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
相关产品推荐
相关产品推荐

