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

传递xlrd引擎仍触发Pandas ValueError:读取URL中xls文件异常

解决直接用requests响应内容读取Excel文件的引擎报错问题

我之前也碰到过这个坑,明明已经指定了xlrd引擎,直接传page.content还是触发ValueError,其实问题出在pandas处理二进制内容的逻辑上,下面给你拆解原因和解决方案:

一、正确的直接读取方式(无需保存本地)

不用先存文件到本地,把二进制内容用BytesIO包装成类文件对象就行,pandas就能正确识别引擎参数了:

import requests
import pandas as pd
from io import BytesIO

page = requests.get(url)  # 你的xls文件URL
df = pd.read_excel(BytesIO(page.content), engine='xlrd')

二、为什么原来的方法会报错?

当你直接传入page.content(bytes类型)时,pandas内部的ExcelFile初始化逻辑对bytes输入的处理有个小漏洞:虽然你显式传了engine参数,但它并没有正确关联到bytes输入的处理流程,反而触发了“必须显式设置引擎”的错误提示——这属于旧版本pandas(比如你搭配Python3.6的版本)的兼容性问题。

而当你把内容保存成本地文件后,传入的是文件路径字符串,pandas能正常识别这个输入类型,并且正确应用你指定的xlrd引擎,所以不会报错。

三、为什么用page.text会触发“embedded null character”错误?

xls是二进制格式的文件,page.text是把响应的二进制内容按照默认编码解码成字符串,这个过程会破坏xls文件的二进制结构,引入无效的空字符,自然会导致解析失败。读取二进制文件必须用page.content来获取原始字节流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:30:22