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

如何通过预签名URL读取Amazon S3加密压缩包并提取CSV到DataFrame

基于S3预签名URL读取密码保护Zip内CSV到DataFrame的实现方案

完全可以通过预签名URL实现需求,无需存储桶名称、对象密钥、AWS访问凭证,也不需要提前知道压缩包内的CSV文件名,实现逻辑与代码如下:

核心实现代码

import requests
import zipfile
import io
import pandas as pd

# 替换为实际参数
PRE_SIGNED_URL = "<你的S3预签名URL>"
ZIP_PASSWORD = b"<你的Zip压缩包密码>" # 密码需为bytes类型,也可写为"<密码>".encode("utf-8")

# 拉取预签名URL对应的Zip文件内容
resp = requests.get(PRE_SIGNED_URL, stream=True)
resp.raise_for_status() # 请求失败时自动抛出异常(如预签名过期、无访问权限等)

# 内存中处理Zip文件,无需落盘
with io.BytesIO(resp.content) as tf:
    tf.seek(0)
    with zipfile.ZipFile(tf, mode='r') as zipf:
        # 自动遍历压缩包筛选CSV文件,无需提前知道文件名
        csv_file_list = [file for file in zipf.namelist() if file.lower().endswith(".csv")]
        if not csv_file_list:
            raise ValueError("压缩包内未检测到CSV格式文件")
        
        # 取第一个匹配的CSV文件,多CSV场景可自行调整筛选逻辑
        target_csv = csv_file_list[0]
        df = pd.read_csv(
            zipf.open(target_csv, pwd=ZIP_PASSWORD),
            sep="|" # 可根据实际CSV分隔符修改
        )
        # 后续可直接处理df对象
        print(df.head())

注意事项

  • 依赖安装:如果运行时提示缺少requests库,执行命令pip install requests安装即可
  • 预签名URL有效期:预签名URL生成时会设置有效时长,必须在有效期内发起请求才能正常获取资源
  • 大文件适配:如果Zip文件体积过大,可调整requests流式读取逻辑,分块加载内容避免内存占用过高
  • 多CSV处理:如果压缩包内存在多个CSV文件,可根据文件名规则、文件大小等条件自定义筛选逻辑,也可批量读取后合并为同一个DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:15:03