首页 > 解决方案 > boto3 - 列出名称包含的子文件夹中的文件

问题描述

我正在尝试列出s3名称中带有特定模式的子文件夹中的所有文件。下面将列出子文件夹中的所有文件,但我只想列出名称中具有特定模式的文件。

session = boto3.Session(aws_access_key_id = 'aws_access_key_id',
                        aws_secret_access_key = 'aws_secret_access_key')

s3 = session.resource('s3')
bucket = s3.Bucket('bucket-name')
prefix = 'subfolder'
pattern = 'pattern-in-file-name'

for bucket_object in bucket.objects.filter(Prefix = prefix):
    print('{0}:{1}'.format(bucket.name, bucket_object.key))

该模式可以以多个选项为前缀。例如,这里是 s3 中的文件列表:

bucket-name/subfolder/x_pattern-in-file-name.csv
bucket-name/subfolder/x_not-wanted-file.csv
bucket-name/subfolder/y_pattern-in-file-name.csv
bucket-name/subfolder/y_not-wanted-file.csv

我只想阅读以下内容:

bucket-name/subfolder/x_pattern-in-file-name.csv
bucket-name/subfolder/y_pattern-in-file-name.csv

我认为某种类型的通配符可以bucket-name/subfolder/*_pattern-in-file-name用作前缀(),但我没有任何运气。

标签: pythonamazon-web-servicesamazon-s3boto3

解决方案


我认为你可以通过添加if条件来实现这一点:

for bucket_object in bucket.objects.filter(Prefix = prefix):
    if pattern in bucket_object.key:
        print('{0}:{1}'.format(bucket.name, bucket_object.key))

推荐阅读