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

使用Pandas读取压缩Excel文件时遇UnsupportedOperation: seek错误求解决

解决Pandas读取压缩Excel文件时的UnsupportedOperation: seek错误

这个问题的核心在于zipfile.ZipFile.open()返回的文件对象不支持seek操作,而Pandas在读取Excel文件前,会尝试调用seek(0)来检测文件类型(比如区分Excel和ODS格式),这就直接触发了报错。

解决方法:将压缩内的文件转为可seek的内存流

我们可以先把zip包内的Excel文件内容完整读取到内存,再用io.BytesIO包装成支持seek操作的对象,之后再交给pd.read_excel()处理。修改后的代码如下:

import pandas as pd
import zipfile
from urllib.request import urlopen
import io

url = 'https://www.cftc.gov/files/dea/history/fut_disagg_xls_2020.zip'

# 下载zip文件到内存中的BytesIO对象
zip_buffer = io.BytesIO(urlopen(url).read())

with zipfile.ZipFile(zip_buffer) as zip_ref:
    # 获取zip内第一个文件的名称
    excel_filename = zip_ref.namelist()[0]
    # 读取该文件的全部内容到新的BytesIO(支持seek)
    excel_buffer = io.BytesIO(zip_ref.read(excel_filename))
    # 正常读取Excel文件
    df = pd.read_excel(excel_buffer)

# 验证结果
print(df.head())

为什么这样能解决问题?

  • zip_ref.open()返回的ZipExtFile是一个顺序流,只能向前读取,不支持seek()、tell()等随机访问操作;
  • zip_ref.read(excel_filename)会把文件的全部内容一次性加载到内存,再用io.BytesIO包装后,就变成了一个支持随机访问的内存流,完全满足Pandas对输入流的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:27:31