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

如何用Python3+Boto3高效从AWS S3拉取含偶数分钟的CSV文件

优化S3偶数分钟文件拉取的方案

你的核心问题是重复调用S3列表接口导致耗时过长——原代码每小时发起30次API请求,每次只查一个分钟前缀的文件,大量时间浪费在网络交互上。最优方案是一次拉取该小时下的所有文件,本地过滤偶数分钟的目标文件,把API请求次数从30次降到1次。

优化思路

  1. 缩小API调用范围:只构造到小时级别的前缀(比如2024_05_20_10_),一次列出该小时下的所有CSV文件。
  2. 本地过滤逻辑:从文件名中提取分钟部分,判断是否为偶数,筛选出目标文件。
  3. 统一收集符合条件的文件Key,后续批量下载。

优化后的代码

paginator = self.s3.get_paginator('list_objects')
files = set()

# 构造小时级前缀,一次拉取该小时所有文件
hour_prefix = '{:%Y_%m_%d_%H_}'.format(self.date)
pages = paginator.paginate(Bucket=self.bucket, Prefix=hour_prefix)

for page in pages:
    if not page.get('Contents'):
        continue
    for item in page['Contents']:
        file_key = item['Key']
        # 按下划线分割文件名,提取分钟部分(格式:Year_Month_Date_Hour_Minute.csv)
        parts = file_key.split('_')
        if len(parts) < 5:
            continue  # 跳过格式不符合的文件
        # 取分钟部分(分割后最后一段是Minute.csv,拆分出分钟数字)
        minute_str = parts[-1].split('.')[0]
        try:
            minute = int(minute_str)
            if minute % 2 == 0:
                files.add(file_key)
        except ValueError:
            continue  # 跳过分钟部分不是数字的异常文件

关键说明

  • API请求优化:仅1次paginate调用,拉取该小时下所有文件,避免多次网络往返。
  • 过滤逻辑:通过字符串分割提取分钟值,判断奇偶性,本地操作几乎无耗时。
  • 容错处理:增加了文件名格式校验和异常捕获,避免因非法格式文件导致程序中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:35:34