簡體   English   中英

僅從 S3 存儲桶獲取文件名而不下載文件

[英]Getting only filenames from S3 bucket without downloading files

我有一個包含 4+ 百萬個文件(50GB+)的存儲桶。 我想在不下載文件的情況下使用 Python 獲取文件列表(沒有數據)。

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

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

我有這樣的事情,但我注意到有很多數據通過網絡傳來。

我試圖查看 ObjectSummary 的文檔,我希望它只下載元數據。 ObjectSummaryHEAD 操作

HEAD 操作從對象中檢索元數據,而不返回對象本身。 如果您只對對象的元數據感興趣,則此操作很有用。 要使用 HEAD,您必須對該對象具有 READ 訪問權限。

HEAD 請求與對象上的 GET 操作具有相同的選項。 除了沒有響應正文之外,響應與 GET 響應相同。

是否仍然需要下載整個文件才能檢索文件名?

在 boto3 中使用資源方法時,請求實際上會轉換為其他 API 調用。 但是,要看到“幕后”發生了什么調用並不容易。 有時一種方法可以轉換為多次調用(例如ListObjectsHeadObject )。

您可以考慮使用客戶端調用方法,因為它們 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 文件。 這對於大型存儲桶(例如您的存儲桶)非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM