从S3存储桶中仅获取文件名而无需下载文件

时间:2020-02-03 21:33:12

标签: python python-3.x amazon-s3

我有一个存储4+百万个文件(50 GB以上)的存储桶。我想使用Python来获取文件列表(无数据)而不下载文件。

files = s3_bucket.objects.filter(Prefix='myPrefix')

# print(len(list(files_raw)))
for key in files:
    print(key.last_modified)

我有类似的东西,但是我注意到网络上有很多数据。

我试图查看ObjectSummary的文档,希望它仅下载元数据。 ObjectSummaryHEAD operation

HEAD操作从对象中检索元数据而不返回 对象本身。如果您只感兴趣,此操作很有用 在对象的元数据中。要使用HEAD,您必须具有对 对象。

HEAD请求与对象的GET操作具有相同的选项。 该响应与GET响应相同,除了没有 响应主体。

是否只是为了检索文件名而必须下载整个文件?

1 个答案:

答案 0 :(得分:1)

在boto3中使用 resource 方法时,请求实际上会转换为其他API调用。但是,要查看“幕后”发生的调用并不容易。有时,一种方法可以转换为多个调用(例如ListObjectsHeadObject)。

您可以考虑使用 client 调用方法,因为它们将1:1映射到AWS上的API调用:

import boto3

s3_client = boto3.client('s3')

paginator = s3_client.get_paginator('list_objects_v2')

response_iterator = paginator.paginate(Bucket='bucket-name')

for page in response_iterator:
    for object in page['Contents']:
        print(object['Key'], object['LastModified'])

我还建议您查看Amazon S3 Inventory。它可以提供包含所有对象及其元数据列表的每日CSV文件。这对于大型水桶(例如您的水桶)非常有用。