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

如何用Python从AWS S3下载含指定子串的CSV文件?

解决AWS S3筛选下载特定子串CSV文件的问题

问题原因

你之前使用的带通配符*的S3 URI无法生效,是因为多数自定义的download_from_s3函数不会自动解析URI中的通配符,需要显式实现文件筛选逻辑。以下是两种可行的解决方案:


方案一:基于boto3手动实现筛选下载

直接使用AWS官方SDK boto3遍历目标前缀下的所有文件,筛选出包含指定子串的文件后下载:

import boto3
import os

def download_filtered_s3_files(bucket_name, prefix, local_dir, filter_substring):
    # 初始化S3客户端
    s3 = boto3.client('s3')
    
    # 创建本地目录(不存在则自动创建)
    os.makedirs(local_dir, exist_ok=True)
    
    # 分页列出S3前缀下的所有对象(避免大目录分页限制)
    paginator = s3.get_paginator('list_objects_v2')
    for page in paginator.paginate(Bucket=bucket_name, Prefix=prefix):
        if 'Contents' not in page:
            continue
        for obj in page['Contents']:
            file_name = os.path.basename(obj['Key'])
            # 筛选包含目标子串的文件
            if filter_substring in file_name:
                local_path = os.path.join(local_dir, file_name)
                s3.download_file(bucket_name, obj['Key'], local_path)
                print(f"已完成下载: {local_path}")

# 配置参数并调用
bucket = "你的Bucket名称"
s3_prefix = "dir1/dir2/dir3/2020/"  # 注意前缀末尾的斜杠,确保只遍历2020目录
local_directory = os.path.join("2020Data")
target_substring = "BANK_NIFTY_5MINs"

download_filtered_s3_files(bucket, s3_prefix, local_directory, target_substring)

方案二:基于AWS CLI的包含/排除规则下载

如果你的download_from_s3函数是封装了AWS CLI命令,可以通过--exclude和--include参数实现精准筛选:

import subprocess
import os

def download_from_s3_filtered():
    s3_source = "s3://dir1/dir2/dir3/2020/"
    local_dir = os.path.join("2020Data")
    # 构建CLI命令:先排除所有文件,再包含符合规则的文件
    cmd = [
        "aws", "s3", "cp", s3_source, local_dir,
        "--recursive",
        "--exclude", "*",
        "--include", "BANK_NIFTY_5MINs*.csv"
    ]
    subprocess.run(cmd, check=True)

# 调用函数
download_from_s3_filtered()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:20:34