python - 从Python中的文件列表生成文件树字典?
问题描述
试图找出最简单的方法来做到这一点。我有一个服务器上所有文件的列表。我想将此列表重写为更好地表示文件树的字典。
我有的:
"study/patient/visitNumber/C1/", "study/patient/visitNumber/C1/subject_14Jan16_V17_C1a.mp4", "study/patient/visitNumber/C1/subject_14Jan16_V17_C1b.mp4", "study/patient/visitNumber/C2/", "study/patient/visitNumber/C2/subject_14Jan16_V17_C2a.mp4", "study/patient/visitNumber/C2/study_subject_V17_C2.mp4", "study/patient/visitNumber/master/C1/subject_14Jan16_V17_C1a.MTS",
我想要的是
{"parentFolder":{
"childFolder":{
"file":"filename",
"grandChildFolder":{"etc...":""}
}
"childFolder2":{
"file":"filename2",
"grandChildFolder2":{"etc...":""}
}
}}
列表中有 6000 多个项目,而且文件夹结构确实不一致,所以我无法按文件夹拆分文件名,也不知道如何将它们添加到字典中。我怀疑递归?谢谢。
解决方案
此代码遍历文件列表,并根据路径创建/修改树。每个目录“节点”都有每个子目录的键值对和 1 个键值对“文件”,这是该目录中所有文件的列表。请注意,仅当列表中的所有文件都从同一根目录开始时,此代码才有效。
// files = [...]
tree = {"files": []}
for file in files:
dirs = file.strip(r"/").split(r"/")
c = tree
for i, d in enumerate(dirs):
if "." in d:
c["files"].append(d)
else:
if d not in c:
c[d] = {"files": []}
c = c[d]
推荐阅读
- laravel - 为什么我需要编译 Bootstrap 而不是在 Laravel 8 中使用 CDN
- python - 无法导出 TensorFlow 对象检测 API
- java - Cannot find symbol ID
- python - 将字符串拆分为空白列表,当下一个字符不是破折号时不包括单个空格
- python - python字典的奇怪行为
- sql - postgres 抓取前 N 个人口最多的组,并将其余的放在“其他”组中
- video - 我无法使用 ffplay 播放 HEVC 编码的 Flv 格式视频文件
- r - R基于列的分组和其他适用列的值构建动态列表
- python - 初学者问题:“在第 2 行 col 1 int "i" 10" Lark 中没有为 'i' 定义终端
- flutter - 如何在 BLoC 设置中使用 Flutters Navigator?