Dat*_*Dog 4 amazon-s3 amazon-ec2 python-3.x
我有一个 S3 存储桶。在存储桶内,我们有一个 2018 年的文件夹,以及我们为每个月和每天收集的一些文件。因此,例如,2018\3\24、2018\3\25 等等。
我们没有将日期放在每一天存储桶中的文件中。
基本上,我想遍历存储桶并使用文件夹结构按“日期”对每个文件进行分类,因为我们需要将其加载到不同的数据库中,并且需要一种识别方法。
我已经阅读了大量关于使用 boto3 的帖子,并反复阅读,但是关于是否可以完成我需要的细节似乎存在冲突。
如果有更简单的方法可以做到这一点,请提出建议。
我得到了它关闭导入 boto3
s3client = boto3.client('s3')
bucket = 'bucketname'
startAfter = '2018'
s3objects= s3client.list_objects_v2(Bucket=bucket, StartAfter=startAfter )
for object in s3objects['Contents']:
print(object['Key'])
Run Code Online (Sandbox Code Playgroud)
使用 boto3 时,每个请求只能列出 1000 个对象。所以要获取bucket中的所有对象,可以使用s3的paginator。
client.get_paginator('list_objects_v2')
是你所需要的。
像这样的东西是你需要的:
import boto3
client = boto3.client('s3')
paginator = client.get_paginator('list_objects_v2')
result = paginator.paginate(Bucket='bucketname',StartAfter='2018')
for page in result:
if "Contents" in page:
for key in page[ "Contents" ]:
keyString = key[ "Key" ]
print keyString
Run Code Online (Sandbox Code Playgroud)
从这个文档:
列表对象:
返回存储桶中的部分或全部(最多 1000 个)对象。您可以使用请求参数作为选择标准来返回存储桶中对象的子集。
list_objects_v2:
返回存储桶中的部分或全部(最多 1000 个)对象。您可以使用请求参数作为选择标准来返回存储桶中对象的子集。注意:ListObjectsV2 是修订后的 List Objects API,我们建议您使用此修订后的 API 进行新的应用程序开发。
从这个答案:
list_objects_v2
增加了功能。由于每页 1000 个键的列表限制,使用标记列出多个页面可能会让人头疼。从逻辑上讲,您需要跟踪您成功处理的最后一个密钥。使用ContinuationToken
,您不需要知道最后一个键,您只需检查NextContinuationToken
响应中是否存在。您可以生成并行进程来处理 1000 个键中的多个键,而无需处理获取下一页的最后一个键。
归档时间: |
|
查看次数: |
13911 次 |
最近记录: |