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

如何用Python Boto3列出S3中/my_folder下排除/logs的文件?

S3 排除指定文件夹列出文件的解决方案

你之前用Delimiter="/logs"的方式不对,这个参数的作用是按指定字符对对象路径进行分组,不是用来排除特定文件夹的。要实现排除/my_folder/logs/下的文件,有两种可靠的方式:

方法一:列出所有对象后过滤结果

先通过list_objects_v2获取/my_folder/下的所有对象,再手动过滤掉路径以/my_folder/logs/开头的条目。注意要处理分页情况(当对象数量超过1000时会自动分页):

import boto3

s3 = boto3.client('s3')
BUCKET_NAME = '你的桶名称'
input_key = 'my_folder/'

# 初始化结果列表和分页参数
filtered_files = []
response = s3.list_objects_v2(Bucket=BUCKET_NAME, Prefix=input_key)

# 处理第一页结果
filtered_files.extend([
    obj for obj in response.get('Contents', [])
    if not obj['Key'].startswith(f"{input_key}logs/")
])

# 处理后续分页
while response.get('IsTruncated'):
    response = s3.list_objects_v2(
        Bucket=BUCKET_NAME,
        Prefix=input_key,
        ContinuationToken=response['NextContinuationToken']
    )
    filtered_files.extend([
        obj for obj in response.get('Contents', [])
        if not obj['Key'].startswith(f"{input_key}logs/")
    ])

# 输出过滤后的文件
for file in filtered_files:
    print(file['Key'])

方法二:利用S3 Select(适合大量对象场景)

如果/my_folder/下对象数量极多,手动过滤效率低,可以用S3 Select直接在服务端过滤:

import boto3

s3 = boto3.client('s3')
BUCKET_NAME = '你的桶名称'
prefix = 'my_folder/'

# 构造查询语句,排除logs路径下的对象
query = """
SELECT s.* FROM s3object s
WHERE NOT s._1 LIKE 'my_folder/logs/%'
"""

response = s3.select_object_content(
    Bucket=BUCKET_NAME,
    ExpressionType='SQL',
    Expression=query,
    InputSerialization={'CSV': {'FileHeaderInfo': 'NONE'}},
    OutputSerialization={'CSV': {}}
)

# 解析返回结果
for event in response['Payload']:
    if 'Records' in event:
        records = event['Records']['Payload'].decode('utf-8')
        for line in records.split('\n'):
            if line:
                print(line.split(',')[0])  # 输出对象Key

注意事项

  • 第一种方法简单直接,适合对象数量不多的场景;
  • 第二种方法由S3服务端完成过滤,减少本地数据传输,适合海量对象的情况;
  • 确保你的IAM权限包含s3:ListBucket(方法一)或s3:SelectObjectContent(方法二)权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:50:21