2017-03-31 94 views
1

foo-bucket/foo-dirにあるすべてのオブジェクト(または最大1000)のリストを取得したいとします。boto3 Bucket.object.filterは効率的にオブジェクトを取得しますか?

バケツ:FOO-バケット

ディレクトリ:FOO-dirの

私はそれが何をするか疑問に思ってBucket.objects boto3のAPIの使用フィルタリング(Bucket.objects.filter)

を見ます内部的には?それはすべてのオブジェクトとフィルタを一覧表示しますか?または、AWSはフィルタ引数を取り、フィルタリングされた結果を返すAPIを提供します。

+0

ご要望を具体的にご記入ください。例えば。将来的にオフラインの完全なリストを使用したいのですか、それともlist_objectsが貴重な費用を負担するのかを知りたいですか? S3からオフラインディレクトリリストを取得する方法があるので http://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html – mootmoot

+0

私はオフラインディレクトリリストを探していませんでした。フィルタリングがbotoかS3 API自体によって行われるかどうかを知ることができます。 – vangap

+0

質問が修正されました。ソースをダウンロードして、https://github.com/botoから回答を見つけることができます。あるいはそこに質問をしてください。 IMHO、objects.filter(Prefix = '')は、フィルタリングされたオブジェクト名を返します。 OTH、 'paginator'では、JSONPathを使用して後処理クエリーを実行できます。 Boto3の開発者はあなたに明確な答えを与えることができるはずです。 – mootmoot

答えて

0

S3のAPIは、名前prefixと一致するオブジェクトのみが含まれるようにレスポンスをフィルタリングしますListObjects要求にprefixをサポートしています。したがって:

import boto3 

s3 = boto3.resource('s3') 
bucket = s3.Bucket('mybucket') 
for obj in bucket.objects.filter(Prefix='foo/bar/fie/baz/'): 
    # do something with obj here 

名前が接頭辞foo/bar/fie/baz/で始まるオブジェクトのみが返されます。

関連する問題