我有一个 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'])
使用 boto3 时,每个请求只能列出 1000 个对象。所以要获取bucket中的所有对象,可以使用s3的分页器 http://boto3.readthedocs.io/en/latest/reference/services/s3.html#paginators.
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
From this http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.list_objects_v2文档:
列表对象:
返回存储桶中的部分或全部(最多 1000 个)对象。你可以
使用请求参数作为选择标准返回子集
桶中的物体。
列表对象_v2:
返回存储桶中的部分或全部(最多 1000 个)对象。你可以
使用请求参数作为选择标准返回子集
桶中的物体。注:ListObjectsV2是修改后的List
对象 API,我们建议您使用此修订版 API 来创建新的
应用程序开发。
From this https://stackoverflow.com/a/37539994/6632342 answer:
list_objects_v2
添加了功能。由于每页列出 1000 个键的限制,使用
列出多个页面的标记可能会让人头疼。从逻辑上讲,你需要
跟踪您成功处理的最后一个密钥。和ContinuationToken
,你不需要知道最后一个键,你只需检查
的存在NextContinuationToken
在回应中。你可以产卵
并行处理 1000 个键的多个而不需要处理
用最后一个键来获取下一页。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)