/ / Бото-скрипт для завантаження останнього файлу з відра s3 - python, amazon-s3, boto

Сценарій Boto для завантаження останнього файлу від s3 відро - пітон, amazon-s3, boto

Мені подобається писати сценарій 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 для версії.