【问题标题】:How can I extend file paths for a dictionary如何扩展字典的文件路径
【发布时间】:2020-06-29 15:26:35
【问题描述】:
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"]}
                 }
}

【问题讨论】:

    标签: python file dictionary expand


    【解决方案1】:

    我在不使用 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"]}
                     }
    }
    

    【讨论】:

      【解决方案2】:

      我认为解决此问题的一种方法是首先在有限的深度中使用plazy.list_files(以获取顶级目录)并手动递归,而不是让它获取整个树。

      一些伪代码来说明......

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

      当你的程序递归到它构建的结​​构中时,它会按照你想要的方式映射。

      【讨论】:

      • 但是,有多少孩子是可变的。一种情况。该文件可以在主文件夹中的第2个(“/data/subdir1/subdir1_1/file1.txt”)命令文件夹中,第5个(“/data/subdir1/subdir1_1/subdir1_2/subdir1_3/subdir1_4/file1.txt” ) 订单文件夹。 @Francozen
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 2023-03-09
      • 2022-01-19
      • 1970-01-01
      • 2020-04-02
      • 2022-06-23
      • 1970-01-01
      相关资源
      最近更新 更多