尝试使用python读取s3中按时间排序的所有文件内容

尝试使用python读取s3中按时间排序的所有文件内容,python,python-3.x,amazon-web-services,amazon-s3,boto3,Python,Python 3.x,Amazon Web Services,Amazon S3,Boto3,我正在尝试按文件上载时对所有文件内容进行排序,我有以下代码: keys = [] kwargs = {'Bucket': 'my_bucket'} while True: resp = s3.list_objects_v2(**kwargs) for obj in resp['Contents']: keys.append(obj['Key']) try: kwargs['ContinuationToken'] = resp['Next

我正在尝试按文件上载时对所有文件内容进行排序,我有以下代码:

keys = []

kwargs = {'Bucket': 'my_bucket'}
while True:
    resp = s3.list_objects_v2(**kwargs)
    for obj in resp['Contents']:
        keys.append(obj['Key'])

    try:
        kwargs['ContinuationToken'] = resp['NextContinuationToken']
    except KeyError:
        break
但它只会把钥匙还给我

如果我正在做:

keys.append(obj)

它返回一个dict,但我不知道如何在正常运行时获取文件内容。。。我遗漏了什么?

通常,当您尝试浏览S3存储桶上的所有文件时,会遇到性能问题。 我建议添加S3事件,并通过队列(SQS)通知“侦听器”有关新文件的信息。 因此,只要您复制了一个新文件,就会向SQS发送一条新消息(因为我们已经创建了一个S3事件),然后客户机将使用SQS队列并对挂起的文件执行任何适当的操作。这比一遍又一遍地遍历整个S3存储桶要快得多。 以下是有关详细信息的链接:

另一个解决方案是在Amazon Athena的帮助下分析S3存储桶


我希望您会发现这很有用。

通常,当您尝试浏览S3存储桶上的所有文件时,您会遇到性能问题。 我建议添加S3事件,并通过队列(SQS)通知“侦听器”有关新文件的信息。 因此,只要您复制了一个新文件,就会向SQS发送一条新消息(因为我们已经创建了一个S3事件),然后客户机将使用SQS队列并对挂起的文件执行任何适当的操作。这比一遍又一遍地遍历整个S3存储桶要快得多。 以下是有关详细信息的链接:

另一个解决方案是在Amazon Athena的帮助下分析S3存储桶


我希望您会发现这很有用。

您需要使用
LastModified
按时间排序。比如:

import boto3

s3_client = boto3.client('s3', region_name='ap-southeast-2')

all_objects = []
kwargs = {'Bucket': 'my-bucket'}

while True:

    # List objects in bucket
    response = s3_client.list_objects_v2(**kwargs)

    # Create an array of (Modified Date, Key) tuples
    for object in response['Contents']:
        all_objects.append((object['LastModified'], object['Key']))

    try:
        # Next page
        kwargs['ContinuationToken'] = response['NextContinuationToken']
    except KeyError:
        break

# Sort by LastModified
sorted_keys = [object[1] for object in sorted(all_objects)]
print (sorted_keys)

您需要使用
LastModified
按时间排序。比如:

import boto3

s3_client = boto3.client('s3', region_name='ap-southeast-2')

all_objects = []
kwargs = {'Bucket': 'my-bucket'}

while True:

    # List objects in bucket
    response = s3_client.list_objects_v2(**kwargs)

    # Create an array of (Modified Date, Key) tuples
    for object in response['Contents']:
        all_objects.append((object['LastModified'], object['Key']))

    try:
        # Next page
        kwargs['ContinuationToken'] = response['NextContinuationToken']
    except KeyError:
        break

# Sort by LastModified
sorted_keys = [object[1] for object in sorted(all_objects)]
print (sorted_keys)

您可以使用
boto3分页器
,反复浏览每页并访问obj
&
LastModified

    s3_client = boto3.client('s3', region_name=REGION)
    pages = s3_client.get_paginator('list_objects_v2')
    page_it = pages.paginate(Bucket=BUCKET)
    files = {}
    for page in page_it:
        for content in page['Contents']
            files[content['Key']] = content['LastModified']

    sorted(files, key=lambda k: k[1])

您可以使用
boto3分页器
,反复浏览每页并访问obj
&
LastModified

    s3_client = boto3.client('s3', region_name=REGION)
    pages = s3_client.get_paginator('list_objects_v2')
    page_it = pages.paginate(Bucket=BUCKET)
    files = {}
    for page in page_it:
        for content in page['Contents']
            files[content['Key']] = content['LastModified']

    sorted(files, key=lambda k: k[1])