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

使用boto3获取S3指定路径下符合命名规则的文件键

boto3获取S3指定路径下符合命名规则的文件键

S3的列表接口原生只支持前缀匹配,不支持服务端的后缀、通配符检索,直接按下面的方式实现,性能和准确性都有保证:

  • 先利用已知的transaction_id构造检索前缀f"{transaction_id}/",让S3服务端直接返回该路径下的所有对象,避免扫描全桶浪费请求和时间
  • 遍历返回的对象列表,本地筛选出以_input.json结尾的键即可
  • 记得处理分页,单次S3列表请求最多返回1000个对象,用boto3自带的paginator不用手动处理翻页参数。

示例代码如下:

import boto3

s3_client = boto3.client('s3')
# 替换为你自己的桶名和已知的transaction_id
TARGET_BUCKET = "你的存储桶名称"
KNOWN_TRANSACTION_ID = "你的transaction_id值"
search_prefix = f"{KNOWN_TRANSACTION_ID}/"
result_keys = []

# 初始化分页器
page_iterator = s3_client.get_paginator('list_objects_v2').paginate(
    Bucket=TARGET_BUCKET,
    Prefix=search_prefix
)

for page in page_iterator:
    # 目录为空时没有Contents字段,直接跳过
    for obj in page.get('Contents', []):
        current_key = obj['Key']
        # 匹配以_input.json结尾的文件
        if current_key.endswith('_input.json'):
            # 如果你需要严格匹配单层路径(即不匹配transaction_id下子文件夹里的同名后缀文件)
            # 放开下面两行注释即可
            # relative_part = current_key.removeprefix(search_prefix)
            # if '/' not in relative_part:
            #     result_keys.append(current_key)
            result_keys.append(current_key)

# result_keys就是所有符合规则的文件键
print(result_keys)

避坑提示

  • 不要不加Prefix直接拉取整个桶的对象列表,桶内文件量大的时候请求耗时和成本都会高很多
  • 不要在Prefix参数里写*、?这类通配符,S3的前缀是严格字符串匹配,不会识别通配符语义
  • 如果对应transaction_id路径下文件量级达到十万级以上,可以考虑用S3清单服务做离线检索,常规业务量级下上面的代码完全够用

内容的提问来源于stack exchange,提问作者back-new

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:24:23