当 HTTP 路由需要明确的代理控制时,先获取 CSV,再让 pandas 处理得到的字节:

from io import BytesIO
import pandas as pd
import requests

route = {
    'http': 'http://proxy.example:8080',
    'https': 'http://proxy.example:8080',
}
with requests.get(
    'https://data.example/report.csv',
    proxies=route,
    timeout=(5, 30),
) as response:
    response.raise_for_status()
    frame = pd.read_csv(BytesIO(response.content), encoding='utf-8')

代理负责传输;HTTP 代理列表为公共 HTTP 路由提供端点候选。pandas 收到类文件对象后,会应用其常规的分隔符、列、编码和数据类型选项。

解析前先检查 HTTP 结果,可以避免把明显的 HTTP 错误响应体当作表格。也要检查意外内容:登录页或策略页可能返回 200,却仍是 HTML 而不是所请求的 CSV。

对于 HTTP URL,read_csv 的 storage_options 会作为请求头传递。该接口并不是 Requests 风格的 proxies 映射。

缓冲区没有归档文件名可用来推断压缩格式。当获取的载荷需要时,请指定 compression。同样的先获取再解析的做法也适用于 read_excel 和字节缓冲区,只需使用与该格式相匹配的电子表格引擎。

此示例把整个响应保留在内存中。对于大型导出,将其流式写入受管理的本地文件,再解析该文件;在数据流程支持时进行分块处理。

相关文章