如何通过python只获取在S3位置创建/修改的最新文件/文件

mee*_*shi 5 python amazon-s3

使用boto我尝试了以下代码:

from boto.s3.connection import S3Connection
conn = S3Connection('XXX', 'YYYY')

bucket = conn.get_bucket('myBucket')

file_list = bucket.list('just/a/prefix/')
Run Code Online (Sandbox Code Playgroud)

但我无法获取列表的长度或file_list的最后一个元素,因为它是BucketListResultSet类型,请为此方案建议一个解决方案

Jan*_*sky 6

您正在尝试使用boto库,这是相当过时和不维护的.该库的问题数量正在增加.

目前开发的更好用途boto3.

首先,让我们定义搜索参数:

>>> bucket_name = "bucket_of_m"
>>> prefix = "region/cz/"
Run Code Online (Sandbox Code Playgroud)

导入boto3并创建代表S3资源的s3:

>>> import boto3
>>> s3 = boto3.resource("s3")
Run Code Online (Sandbox Code Playgroud)

获取桶:

>>> bucket = s3.Bucket(name=bucket_name)
>>> bucket
s3.Bucket(name='bucket_of_m')
Run Code Online (Sandbox Code Playgroud)

为具有给定前缀的对象定义过滤器:

>>> res = bucket.objects.filter(Prefix=prefix)
>>> res
s3.Bucket.objectsCollection(s3.Bucket(name='bucket_of_m'), s3.ObjectSummary)
Run Code Online (Sandbox Code Playgroud)

并迭代它:

>>> for obj in res:
...     print obj.key
...     print obj.size
...     print obj.last_modified
...
Run Code Online (Sandbox Code Playgroud)

每个obj都是ObjectSummary(而不是Object本身),但它仍然需要了解它

>>> obj
s3.ObjectSummary(bucket_name='bucket_of_m', key=u'region/cz/Ostrava/Nadrazni.txt')
>>> type(obj)
boto3.resources.factory.s3.ObjectSummary
Run Code Online (Sandbox Code Playgroud)

您可以从中获取Object并根据需要使用它:

>>> o = obj.Object()
>>> o
s3.Object(bucket_name='bucket_of_m', key=u'region/cz/rodos/fusion/AdvancedDataFusion.xml')
Run Code Online (Sandbox Code Playgroud)

过滤的选项并不多,但前缀可用.