从bucket.objects.filter中排除S3文件夹(Prefix=prefix)

Ash*_*csi 5 amazon-s3 boto3

我有一个 python boto3 代码,它列出了 s3 文件夹/前缀下的所有对象。此代码将返回所有对象,即

温度/测试/日期=17-09-2019/

临时/测试/日期=17-09-2019/100.json

我想从响应中排除temp/test/date=17-09-2019/ key 。我知道s3中不存在文件夹的概念。请在下面找到我的代码:

bucket_name = 'temp-bucket'
prefix = 'temp/test/date=17-09-2019'

bucket = s3_resource.Bucket(bucket_name)
s3_files = list(bucket.objects.filter(Prefix=prefix))

for file in s3_files:
    print(file)
Run Code Online (Sandbox Code Playgroud)

有没有办法从响应中排除文件夹?

谢谢

pgo*_*cki 6

您可以检查item.size,因为目录的大小=0:

for item in response:
    if item.size > 0:
        print(item.key)
Run Code Online (Sandbox Code Playgroud)


Lam*_*nus 5

无法过滤掉结果,但您可以按如下方式执行此操作:

import boto3

bucket_name = 'temp-bucket'
s3 = boto3.resource('s3')

ignore = s3.Bucket(bucket_name ).objects.filter(Prefix='temp/test/date=17-09-2019')
response = s3.Bucket(bucket_name ).objects.all()

for item in response:
    if item not in ignore:
        print(item.key)
Run Code Online (Sandbox Code Playgroud)