概要
botocore を使ってバケット配下にあるオブジェクトで最後に追加されたオブジェクトを取得する方法を紹介します
環境
- macOS 11.6.6
- Python 3.10.2
- botocore 1.24.11
サンプルコード
import boto3
import sys
class TestClient():
def __init__(self):
self.client = boto3.client(
's3',
region_name='us-east-1',
endpoint_url='https://s3.compatible.api',
aws_access_key_id='xxx',
aws_secret_access_key='xxx',
)
def get_latest_object(self, bucket):
result = self.client.list_objects(
Bucket=bucket
)
# sorted用のラムダの作成
get_last_modified = lambda obj: int(obj['LastModified'].strftime('%s'))
objs = result['Contents']
# リスト内包を使ってdictをソートする、ソートするキーはラムダを使用する
last_added = [obj for obj in sorted(objs, key=get_last_modified, reverse=True)][0]
return last_added
if __name__ == '__main__':
cli = TestClient()
print(cli.get_latest_object(sys.argv[1]))
Do not assign a lambda expression, use a def (E731) で怒られる場合はこちら
import boto3
import sys
class TestClient():
def __init__(self):
self.client = boto3.client(
's3',
region_name='us-east-1',
endpoint_url='https://s3.compatible.api',
aws_access_key_id='xxx',
aws_secret_access_key='xxx',
)
def get_latest_object(self, bucket):
result = self.client.list_objects(
Bucket=bucket
)
# sorted用の関数の作成
def get_last_modified(obj):
return int(obj['LastModified'].strftime('%s'))
objs = result['Contents']
# リスト内包を使ってdictをソートする、ソートするキーはラムダを使用する
last_added = [obj for obj in sorted(objs, key=get_last_modified, reverse=True)][0]
return last_added
if __name__ == '__main__':
cli = TestClient()
print(cli.get_latest_object(sys.argv[1]))
0 件のコメント:
コメントを投稿