首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python- Aws Boto 3从一个未知深度的桶/前缀中搜索子文件夹

Python- Aws Boto 3从一个未知深度的桶/前缀中搜索子文件夹
EN

Stack Overflow用户
提问于 2020-06-20 21:40:32
回答 2查看 329关注 0票数 1

考虑到我有一个带有多个子文件夹(具有不同深度)的S3桶。是否可以根据我正在寻找的子文件夹递归列出所有对象及其路径?

例如:

  • 桶:DataLake-App
  • 前缀:App1/2020/06/21/Timestamp/
  • 附加子文件夹路径:....../table_001/**.csv

那个..。是未知的,可以有一个未知的深度。

如果我知道表、桶和前缀,那么如果它包含表名并获取它的所有内容,我可以搜索子文件夹吗?

如果是这样的话,在AWS中会是什么样子?在过去的几个小时里,我一直在抓我的头。任何帮助/想法都会很好!!

EN

回答 2

Stack Overflow用户

发布于 2020-06-20 23:14:57

list_objects_v2()命令在boto3中将返回桶中的所有对象。

通过指定一个Prefix,它将只返回给定路径中的对象。

如果您希望做进一步的操作,例如只查找键以/table_001/**.csv结尾的对象,那么这应该在Python本身中完成,比如使用endswith()或regex搜索。

请注意,list_objects_v2()一次只返回1000个对象,因此可能需要使用分页器或使用ContinuationToken的循环来返回所有所需的对象。

票数 3
EN

Stack Overflow用户

发布于 2020-07-31 13:58:47

您可以使用不需要使用分页器的resource特性。

代码语言:javascript
复制
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

用这个,

代码语言:javascript
复制
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)

会给你结果的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62492023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档