Мені подобається писати сценарій boto python, щоб завантажити останній самий файл із відра s3, тобто, наприклад, у мене є 100 файлів у відро s3, мені потрібно завантажити останній самий завантажений файл у нього.
Чи є спосіб завантажити останній самий модифікований файл з S3 за допомогою python boto.
Відповіді:
12 для відповіді № 1Ви можете перелічити всі файли у відрі та знайти той самий з останнім (використовуючи атрибут last_modified).
>>> import boto
>>> c = boto.connect_s3()
>>> bucket = c.lookup("mybucketname")
>>> l = [(k.last_modified, k) for k in bucket]
>>> key_to_download = sorted(l, cmp=lambda x,y: cmp(x[0], y[0]))[-1][1]
>>> key_to_download.get_contents_to_filename("myfile")
Зауважте, що це було б цілкомнеефективне у вас було багато файлів у відрі. У такому випадку ви можете розглянути можливість використання бази даних для відстеження файлів і дат, щоб зробити запит більш ефективним.
7 для відповіді № 2
Щоб додати відповідь до @garnaat, можливо, ви зможете вирішити неефективність, використовуючи prefix
щоб зменшити відповідні файли. Замість c.lookup
, цей приклад буде шукати лише файли в subdir
підрозділ, який починається з file_2014_
:
>>> import boto
>>> c = boto.connect_s3()
>>> bucket = c.get_bucket("mybucketname")
>>> bucket_files = bucket.list("subdir/file_2014_")
>>> l = [(k.last_modified, k) for k in bucket_files]
>>> key_to_download = sorted(l, cmp=lambda x,y: cmp(x[0], y[0]))[-1][1]
>>> key_to_download.get_contents_to_filename("target_filename")
3 для відповіді № 3
S3 запустив функціональну версію файлів у відрі http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html.
Ви можете отримати останні n файлів, зателефонувавши на s3client.listVersions (запит) та вказавши n, якщо хочете. http://docs.aws.amazon.com/AmazonS3/latest/dev/list-obj-version-enabled-bucket.html
Приклад - в java. Не впевнений, чи додано boto API для версії.