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

如何将爬取的ODS数据存入内存后使用pandas-ods-reader读取

解决方案

可以通过内存缓冲区的方式实现无需落地本地磁盘的ODS读取,具体实现如下:

前置依赖

需先安装网络请求库requests:

pip install requests

实现代码

import requests
from io import BytesIO
from pandas_ods_reader import read_ods

url = 'https://www.opendatani.gov.uk/dataset/be060ba2-19b1-426c-9736-94897e290bb4/resource/968cbade-736d-4d89-ae82-e54e68c31ea6/download/2019-northern-ireland-traffic-count-data.ods'

# 发起请求获取文件二进制内容
resp = requests.get(url)
# 检查请求是否正常,异常会直接抛出错误,避免解析错误内容
resp.raise_for_status()

# 将二进制内容封装为类文件对象,直接传入read_ods读取
data_range = read_ods(BytesIO(resp.content))
原理解释
  • pandas的read_excel内置了远程URL自动处理逻辑,会自动下载文件内容并封装为可读取对象,因此可以直接传入URL参数
  • pandas-ods-reader仅支持本地文件路径或类文件对象作为入参,直接传入URL字符串时,会将其识别为本地文件路径,找不到对应后缀的本地文件就会抛出Unknown filetype错误
  • 上述方案通过BytesIO将二进制文件内容封装为符合Python IO协议的类文件对象,pandas-ods-reader可以直接读取该对象的内容,效果和读取本地文件完全一致

补充说明

如果需要读取ODS文件中的指定工作表,可以在read_ods中传入sheet参数,参数值支持工作表序号(从1开始计数)或工作表名称:

# 读取第2个工作表
data_range = read_ods(BytesIO(resp.content), sheet=2)
# 读取名为traffic_data的工作表
data_range = read_ods(BytesIO(resp.content), sheet="traffic_data")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:54:02