如果我有如下目录结构并且前缀是/folder1,
/folder1/folder11/folder12/folder13/*.files
/folder21/folder22/folder23/*.files
/folder31/folder32/*.files
我想动态循环这些目录,以便分别读取每个叶文件夹中的文件,即我需要一个列表
[
/folder1/folder11/folder12/folder13/,
/folder1/folder21/folder22/folder23/,
/folder1/folder31/folder32/
]
除了递归地循环每个前缀、获取下一级前缀、连接、获取下一级等等,直到到达最后一个(叶)文件夹之外,是否有更好的方法来获取它?
列出来自 Amazon S3 的对象时,如果您指定Delimiter='/'
,那么它将返回一个列表CommonPrefixes
。这实际上是给定子目录的列表Prefix
.
但是,我建议您不要考虑目录。相反,只需循环遍历all对象并查看Key
了解物体的路径。
如果您只想要包含文件的路径列表,请使用以下命令:
import boto3
BUCKET = 'my-bucket'
s3_resource = boto3.resource('s3')
folders = set()
# Find paths of all non-empty objects (to exclude zero-length 'folder' objects)
for object in s3_resource.Bucket(BUCKET).objects.all():
if object.size > 0 and '/' in object.key:
folders.add(object.key[:object.key.rfind('/')])
print (folders)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)