我有一个存储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的文档,希望它仅下载元数据。 ObjectSummary和 HEAD operation
HEAD操作从对象中检索元数据而不返回 对象本身。如果您只感兴趣,此操作很有用 在对象的元数据中。要使用HEAD,您必须具有对 对象。
HEAD请求与对象的GET操作具有相同的选项。 该响应与GET响应相同,除了没有 响应主体。
是否只是为了检索文件名而必须下载整个文件?
答案 0 :(得分:1)
在boto3中使用 resource 方法时,请求实际上会转换为其他API调用。但是,要查看“幕后”发生的调用并不容易。有时,一种方法可以转换为多个调用(例如ListObjects
和HeadObject
)。
您可以考虑使用 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文件。这对于大型水桶(例如您的水桶)非常有用。