Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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/2/django/24.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:获取AmazonS3存储桶中的前100个最新密钥_Python_Django_Amazon Web Services_Amazon S3_Boto - Fatal编程技术网

Python:获取AmazonS3存储桶中的前100个最新密钥

Python:获取AmazonS3存储桶中的前100个最新密钥,python,django,amazon-web-services,amazon-s3,boto,Python,Django,Amazon Web Services,Amazon S3,Boto,我尝试使用boto,但它有.list()方法,该方法对我的数据集很长,还有.get\u all\u keys(),该方法随机获取数据集。我想在S3存储桶中获取大约100-1000个最新的密钥,其中包含数百万个密钥。最有效的方法是什么 import boto3 client = boto3.client('s3') start_after = “” response = client.list_objects(Bucket='<bucket>', StartAfter =sta

我尝试使用boto,但它有
.list()
方法,该方法对我的数据集很长,还有
.get\u all\u keys()
,该方法随机获取数据集。我想在S3存储桶中获取大约100-1000个最新的密钥,其中包含数百万个密钥。最有效的方法是什么

import boto3

client = boto3.client('s3')

start_after = “”

response =  client.list_objects(Bucket='<bucket>', StartAfter =start_after,MaxKeys=1000)
从这1000条记录中获取最后一个键,并将其分配给start\u after变量,并在这次发出另一个请求

新请求将开始提取startAfter提供的密钥之后的密钥


如果您不介意数据稍微过时,您可以使用,它可以提供一个每日CSV文件,列出Amazon S3 bucket中的所有对象:

Amazon S3 inventory提供逗号分隔值(CSV)或Apache优化行-列(ORC)输出文件,每天或每周为S3 bucket或共享前缀(即名称以公共字符串开头的对象)列出对象及其相应元数据


您可以分析此文件以获取密钥和上次修改的日期,然后按日期排序。

根据上次修改进行排序。@kartheek问题是,在根据上次修改进行排序之前,我无法加载所有密钥–甚至加载所有密钥都要花很长时间。也许你可以给我看一些你的确切意思的代码——也许我理解错了。如果有数百万个键,那么使用S3API就不能有效地做到这一点。您必须使用前一天的S3清单,或者维护您自己的密钥数据库,按照您想要的方式进行排序。@jarmood好的,我明白了。有没有一种方法可以让我加载更多。比如使用fetch_more函数或类似的功能?@jarmood甚至可以获得上一次在8月份修改的1000个(随机)键。好的,我明白你的意思。但是生成
objs
是我遇到一些问题的部分。
'Contents': [
    {
        'Key': 'string',
        'LastModified': datetime(2015, 1, 1),
        'ETag': 'string',
        'Size': 123,
        'StorageClass': 'STANDARD'|'REDUCED_REDUNDANCY'|'GLACIER'|'STANDARD_IA'|'ONEZONE_IA',
        'Owner': {
            'DisplayName': 'string',
            'ID': 'string'
        }
    },
],