Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅从S3存储桶中获取最后100个左右的文件(最近的文件)_Python_Amazon Web Services_Amazon S3_Boto3 - Fatal编程技术网

Python 仅从S3存储桶中获取最后100个左右的文件(最近的文件)

Python 仅从S3存储桶中获取最后100个左右的文件(最近的文件),python,amazon-web-services,amazon-s3,boto3,Python,Amazon Web Services,Amazon S3,Boto3,我正在构建一个进程,该进程将根据文件的最后接收日期向S3存储桶发送可定制的警报 因为我的桶很大,这样做需要很长的时间: import boto3 s3 = boto3.resource('s3',aws_access_key_id='demo', aws_secret_access_key='demo') my_bucket = s3.Bucket('demo') bucket_items = my_bucket.objects.all(): 当然,我可以简单地执行上述操作,然后按last

我正在构建一个进程,该进程将根据文件的最后接收日期向S3存储桶发送可定制的警报

因为我的桶很大,这样做需要很长的时间:

import boto3
s3 = boto3.resource('s3',aws_access_key_id='demo', aws_secret_access_key='demo')

my_bucket = s3.Bucket('demo')

bucket_items = my_bucket.objects.all():
当然,我可以简单地执行上述操作,然后按
last\u modified
属性进行排序,但我想知道在进行API调用时,是否有更优雅的方法来筛选100个最近的文件

理想情况下,我还希望能够通过搜索字符串进一步自定义此功能-例如,我可能需要文件名中包含“.docx”的100个最新文件,或者我可能需要大小超过1MB的最新文件-等等


只是想知道当不需要整个bucket的内容时,这种查询的最佳实践是什么。

关于100个最新文件,您可以在bot3中使用list_对象。作为回报,有“LastModified”字段用于排序和获取所需的文件。

对于筛选,您可以使用此代码列出所有对象,并添加一些代码以供下载

srcbucket = 'bucket'
srckey = 'object'
obj = s3.Object(srcbucket, srckey)

关于100个最新的文件,您可以在boto3中使用list_对象。作为回报,有“LastModified”字段用于排序和获取所需的文件。

对于筛选,您可以使用此代码列出所有对象,并添加一些代码以供下载

srcbucket = 'bucket'
srckey = 'object'
obj = s3.Object(srcbucket, srckey)

您的可用选项包括:

  • 从bucket中检索对象列表:但是如果您有大量对象(10000+),这会很慢,但是使用前缀可以使这一过程更快,或者
  • 获取每日列表途径:但听起来您希望信息比每日更新,或者
  • 维护您自己的对象数据库
要维护自己的对象数据库,请执行以下操作:

  • 创建一个Amazon S3事件,该事件在创建/更新/删除对象时触发AWS Lambda函数
  • AWS Lambda函数应将此信息存储在数据库中(您需要编写此功能)
  • 然后,您可以查询数据库中的所有需求

您可用的选项有:

  • 从bucket中检索对象列表:但是如果您有大量对象(10000+),这会很慢,但是使用前缀可以使这一过程更快,或者
  • 获取每日列表途径:但听起来您希望信息比每日更新,或者
  • 维护您自己的对象数据库
要维护自己的对象数据库,请执行以下操作:

  • 创建一个Amazon S3事件,该事件在创建/更新/删除对象时触发AWS Lambda函数
  • AWS Lambda函数应将此信息存储在数据库中(您需要编写此功能)
  • 然后,您可以查询数据库中的所有需求

它必须是实时的吗?每天使用一次获取对象的csv怎么样。csv将更容易和更快地处理。不必是真正的实时,但我希望每2-3小时运行一次此脚本-这样,如果我们接收任何文件时出现中断,我们将在数小时内发现,因此有机会在发现问题的同一天解决问题。它必须是实时的吗?每天使用一次获取对象的csv怎么样。csv将更容易和更快地处理。不必是真正的实时,但我希望每2-3小时运行一次此脚本-这样,如果我们接收任何文件时出现中断,我们将在数小时内发现,因此有机会在发现问题的同一天解决问题。非常感谢您的全面回答。在我的情况下,使用lambdas来构建和维护一个数据库有点过头了,所以很遗憾,我每次都要坚持检索所有对象的列表。谢谢。非常感谢你的全面回答。在我的情况下,使用lambdas来构建和维护一个数据库有点过头了,所以很遗憾,我每次都要坚持检索所有对象的列表。谢谢