Boto3 を使用して S3 バケットの最新ファイルをダウンロードするにはどうすればいいですか? 質問する

Boto3 を使用して S3 バケットの最新ファイルをダウンロードするにはどうすればいいですか? 質問する

私が見つけた他の質問は、Botoの古いバージョンに関するものでした。S3バケットの最新ファイルをダウンロードしたいのですが、ドキュメンテーションブール値の IsLatest を取得するメソッド list_object_versions() があることを発見しました。残念ながら、接続を設定してファイルをダウンロードすることしかできませんでした。コードを拡張してバケットの最新ファイルを取得する方法を教えてください。ありがとうございます。

import boto3
conn = boto3.client('s3',
                    region_name="eu-west-1",
                    endpoint_url="customendpoint",
                    config=Config(signature_version="s3", s3={'addressing_style': 'path'}))

ここから、 というバケットから最後に追加されたファイルを取得する方法がわかりませんmytestbucket。バケットにはさまざまな csv ファイルがありますが、もちろんすべて名前が異なります。

アップデート:

import boto3
from botocore.client import Config

s3 = boto3.resource('s3', region_name="eu-west-1", endpoint_url="custom endpoint", aws_access_key_id = '1234', aws_secret_access_key = '1234', config=Config(signature_version="s3", s3={'addressing_style': 'path'}))
my_bucket = s3.Bucket('mytestbucket22')
unsorted = []
for file in my_bucket.objects.filter():
   unsorted.append(file)

files = [obj.key for obj in sorted(unsorted, key=get_last_modified, reverse=True)][0:9]

次のようなエラーが発生します。

NameError: name 'get_last_modified' is not defined

ベストアンサー1

私が提供した回答のバリエーション:Boto3 S3、最終更新日でバケットをソート必要に応じてコードを変更できます。

get_last_modified = lambda obj: int(obj['LastModified'].strftime('%s'))

s3 = boto3.client('s3')
objs = s3.list_objects_v2(Bucket='my_bucket')['Contents']
last_added = [obj['Key'] for obj in sorted(objs, key=get_last_modified)][0]

並べ替えを逆にしたい場合は、次のようにします。

[obj['Key'] for obj in sorted(objs, key=get_last_modified, reverse=True)][0]

おすすめ記事