考虑到我有一个带有多个子文件夹(具有不同深度)的S3桶。是否可以根据我正在寻找的子文件夹递归列出所有对象及其路径?
例如:
DataLake-AppApp1/2020/06/21/Timestamp/....../table_001/**.csv那个..。是未知的,可以有一个未知的深度。
如果我知道表、桶和前缀,那么如果它包含表名并获取它的所有内容,我可以搜索子文件夹吗?
如果是这样的话,在AWS中会是什么样子?在过去的几个小时里,我一直在抓我的头。任何帮助/想法都会很好!!
发布于 2020-06-20 23:14:57
list_objects_v2()命令在boto3中将返回桶中的所有对象。
通过指定一个Prefix,它将只返回给定路径中的对象。
如果您希望做进一步的操作,例如只查找键以/table_001/**.csv结尾的对象,那么这应该在Python本身中完成,比如使用endswith()或regex搜索。
请注意,list_objects_v2()一次只返回1000个对象,因此可能需要使用分页器或使用ContinuationToken的循环来返回所有所需的对象。
发布于 2020-07-31 13:58:47
您可以使用不需要使用分页器的resource特性。
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('my_bucket')
keys = 0
for obj in bucket.objects.all():
keys += 1
if keys > 10000: break
print(keys)
# 10001用这个,
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('DataLake-App')
for obj in bucket.objects.filter(Prefix='App1/2020/06/21/Timestamp/'):
if obj.key.endswith('.csv') and obj.key.split('/')[-1] == 'table_001':
print(obj.key)会给你结果的。
https://stackoverflow.com/questions/62492023
复制相似问题