2022年6月15日水曜日

バケット配下に存在する最後に追加されたファイルを取得する方法

バケット配下に存在する最後に追加されたファイルを取得する方法

概要

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 件のコメント:

コメントを投稿