尝试使用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])