繁体   English   中英

如何使用python boto3获取所有子目录,除AWS S3中的文件外所有级别的深度

[英]How to get ALL subdirectories, all levels deep except files in AWS S3 with python boto3

有很多类似的问题,但我没有找到这个问题的确切答案。 如何从初始目录开始获取所有子目录。 子目录的深度未知。

可以说我有:

data/subdir1/subdir2/file.csv
data/subdir1/subdir3/subdir4/subdir5/file2.csv
data/subdir6/subdir7/subdir8/file3.csv

所以我想要么得到所有长度都深的所有子目录的列表,或者更好的是文件前一级的所有路径。 在我的示例中,我希望得到:

data/subdir1/subdir2/
data/subdir1/subdir3/subdir4/subdir5/
data/subdir6/subdir7/subdir8/

但我也可以使用它:

data/subdir1/
data/subdir1/subdir2/
data/subdir1/subdir3/
data/subdir1/subdir3/subdir4/
etc...
data/subdir6/subdir7/subdir8/

到目前为止,我的代码只能让我获得一级目录深度:

result = await self.s3_client.list_objects(
    Bucket=bucket, Prefix=prefix, Delimiter="/"
)

subfolders = set()
for content in result.get("CommonPrefixes"):
    print(f"sub folder : {content.get('Prefix')}")
    subfolders.add(content.get("Prefix"))

return subfolders
import os

# list_objects returns a dictionary. The 'Contents' key contains a
# list of full paths including the file name stored in the bucket
# for example: data/subdir1/subdir3/subdir4/subdir5/file2.csv
objects = s3_client.list_objects(Bucket='bucket_name')['Contents']

# here we iterate over the fullpaths and using 
# os.path.dirname we get the fullpath excluding the filename
for obj in objects:
    print(os.path.dirname(obj['Key'])

为了使其成为目录“路径”的唯一排序列表,我们将使用 sort a set comprehension inline。 集合是唯一的,sorted 会将其转换为列表。

请参阅https://docs.python.org/3/tutorial/datastructures.html#sets

import os
paths = sorted({os.path.dirname(obj['Key']) for obj in objects})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM