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

Python从URL下载CSV并快速转换为JSON的最优实现方案咨询

性能瓶颈分析

你当前的代码主要有三个层面的性能问题:

  • 网络IO层面:requests.get默认会把整个响应的字节全部加载到内存才会返回,大文件场景下内存开销高,等待时间长
  • 数据处理层面:先把全量字节解码为字符串、再用StringIO包装、再全量转成列表传给json.dumps,中间产生了多份全量冗余数据,内存峰值高,串行处理效率低
  • 模块性能层面:标准库的csv模块是纯Python实现,json模块序列化速度也一般,大文件下处理效率偏低
优化方案

无第三方依赖的优化方案

不需要额外安装库,修改现有逻辑就能获得明显提速:

import requests
import csv
import json
import codecs

URL = "你的目标CSV地址"
# 开启流模式边下载边处理,添加超时避免无意义等待
with requests.get(URL, stream=True, timeout=30) as resp:
    resp.raise_for_status()
    # 跳过全量解码步骤,直接流式解码后传给DictReader处理
    reader = csv.DictReader(codecs.iterdecode(resp.raw, 'utf-8'))
    # 如果是直接输出到文件,可以逐行写入JSON连列表都不需要,内存开销更低
    rows = [row for row in reader]
    json_data = json.dumps(rows)

这个方案相比原代码,内存峰值可以降低一半以上,大文件下速度提升30%左右。

高性能方案(推荐,大文件场景提速5~10倍)

用编译型高性能库替换标准库组件,是目前速度最快的实现方式:

  1. 用polars替换标准库csv做CSV解析:底层是多线程Rust实现,解析速度远快于纯Python的csv模块,支持直接从URL读取CSV,自动处理流式下载
  2. 用orjson替换标准库json做序列化:序列化速度是标准库的3~5倍,内存开销更低
    实现代码:
import polars as pl
import orjson

URL = "你的目标CSV地址"
# 直接从URL读CSV,底层自动处理下载、解析,不需要手动处理网络请求
df = pl.read_csv(URL)
# 序列化输出,也可以直接用df.write_json("output.json")直接写入文件,速度更快
json_data = orjson.dumps(df.to_dicts())

如果不需要用到DataFrame的其他能力,也可以用fastcsv这个轻量的C实现CSV解析库,比polars更轻量,速度也远快于标准库csv。

额外提速技巧
  • 如果CSV有不需要的字段,可以在read_csv的时候指定columns参数只读取需要的列,减少处理的数据量
  • 如果服务器支持HTTP压缩,requests和polars都会自动处理,不需要额外配置,能大幅减少网络传输时间
  • 如果需要同时处理多个CSV文件,可以用异步HTTP客户端httpx替换requests,并发下载能进一步提升总速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:45:04