如何为字典扩展文件路径

3
import plazy


txt_filter = lambda x : True if x.endswith('') else False
file_paths: list = plazy.list_files(root='/data/', filter_func=txt_filter, is_include_root=True)

print(file_paths)

输出:

 ["/data/subdir1/subdir1_1/file1.txt","/data/subdir2/subdir2_1/file2.txt", "/data/subdir2/subdir2_1/file1.txt", "/data/subdir3/subdir3_1/subdir3_2/file1.txt"]

如何为特定字典扩展这些路径。我希望它看起来像这样。

{ 
"data": 
    "subdir1" : { "subdir1_1": ["file1.txt"]},
    "subdir2" : { "subdir2_1": ["file1.txt", "file2.txt"]},
    "subdir3" : { "subdir3_1":
                     { "subdir3_2": ["file1.txt"]}
                 }
}
2个回答

3

我认为解决这个问题的一种方法是使用plazy.list_files进行有限深度优先遍历(获取顶层目录),然后手动递归,而不是让它获取整个树。

以下是一些伪代码以说明...

topdirs = getdirs(/root)

foreach dir
  children = getdirs(/dir)
  leaves = gettxtfiles(/dir/)


当您的程序递归进入其构建的结构时,它会按照您想要的方式映射。

1
然而,孩子的数量将是可变的情况。该文件可以位于主文件夹中的第2个(“/data/subdir1/subdir1_1/file1.txt”)顺序文件夹或第5个(“/data/subdir1/subdir1_1/subdir1_2/subdir1_3/subdir1_4/file1.txt”)顺序文件夹中。@Francozen - sumeyyeemir

0

我在不使用Plazy的情况下解决了它。

path = '/data/'

import os
import pprint

def f(path):
    if os.path.isdir(path):
        d ,l = {}, []
        for name in os.listdir(path):
            if os.path.isdir(os.path.join(path, name)):
                d[name] = f(os.path.join(path, name))
            else:
                l.append(name)
                d = l
    return d

pprint.pprint(f(path))

输出

{ 
"data": 
    "subdir1" : { "subdir1_1": ["file1.txt"]},
    "subdir2" : { "subdir2_1": ["file1.txt", "file2.txt"]},
    "subdir3" : { "subdir3_1":
                     { "subdir3_2": ["file1.txt"]}
                 }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接