簡體   English   中英

計算 S3 存儲桶中的鍵

[英]Counting keys in an S3 bucket

使用下面的 boto3 庫和 python 代碼,我可以遍歷 S3 存儲桶和前綴,打印出前綴名稱和鍵名稱如下:

import boto3
client = boto3.client('s3')

pfx_paginator = client.get_paginator('list_objects_v2')
pfx_iterator = pfx_paginator.paginate(Bucket='app_folders', Delimiter='/')
for prefix in pfx_iterator.search('CommonPrefixes'):
    print(prefix['Prefix'])

    key_paginator = client.get_paginator('list_objects_v2')
    key_iterator = key_paginator.paginate(Bucket='app_folders', Prefix=prefix['Prefix'])
    for key in key_iterator.search('Contents'):
        print(key['Key'])

在密鑰循環內部,我可以放入一個計數器來計算密鑰(文件)的數量,但這是一個昂貴的操作。 有沒有辦法在給定存儲桶名稱和前綴的情況下進行一次調用並返回該前綴中包含的鍵的計數(即使它超過 1000)?

更新:我在這里找到了一篇文章其中展示了一種使用 AWS CLI 執行此操作的方法,如下所示:

aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"

有沒有辦法用 boto3 API 做類似的事情?

您可以使用MaxKeys=1000參數來完成。 對於您的情況:

pfx_iterator = pfx_paginator.paginate(Bucket='app_folders', Delimiter='/', MaxKeys=1000)

一般來說:

response = client.list_objects_v2(
    Bucket='string',
    Delimiter='string',
    EncodingType='url',
    MaxKeys=123,
    Prefix='string',
    ContinuationToken='string',
    FetchOwner=True|False,
    StartAfter='string',
    RequestPayer='requester'
)

它會便宜 1000 倍 :) 文檔在這里

使用 aws cli 很容易計算:

aws s3 ls  <folder url> --recursive --summarize | grep <comment>

例如,

aws s3 ls  s3://abc/ --recursive --summarize | grep "Number of Objects"

暫無
暫無

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

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