【问题标题】:Boto script to download latest file from s3 bucket用于从 s3 存储桶下载最新文件的 Boto 脚本
【发布时间】:2012-10-24 23:36:42
【问题描述】:

我喜欢编写一个 boto python 脚本来从 s3 存储桶下载最新的文件,例如,我在 s3 存储桶中有 100 个文件,我需要在其中下载最近上传的文件。

有没有办法使用 python boto 从 S3 下载最近修改过的文件。

【问题讨论】:

    标签: python amazon-s3 boto


    【解决方案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')
    

    但是请注意,如果存储桶中有很多文件,这将非常低效。在这种情况下,您可能需要考虑使用数据库来跟踪文件和日期,以提高查询效率。

    【讨论】:

      【解决方案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】:

        S3 启动了桶 http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html 中文件的版本控制功能。

        您可以通过调用 s3client.listVersions(request) 并根据需要指定 n 来获取最新的 n 个文件。参见 http://docs.aws.amazon.com/AmazonS3/latest/dev/list-obj-version-enabled-bucket.html

        示例在 java 中。不确定 boto 是否添加了用于版本控制的 API。

        【讨论】:

          猜你喜欢
          • 2015-09-01
          • 1970-01-01
          • 2013-04-14
          • 1970-01-01
          • 1970-01-01
          • 2018-01-04
          • 1970-01-01
          • 2015-05-20
          • 2019-05-30
          相关资源
          最近更新 更多