首页 > 解决方案 > 从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 多个项目,而且文件夹结构确实不一致,所以我无法按文件夹拆分文件名,也不知道如何将它们添加到字典中。我怀疑递归?谢谢。

标签: python

解决方案


此代码遍历文件列表,并根据路径创建/修改树。每个目录“节点”都有每个子目录的键值对和 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]

推荐阅读