【问题标题】:Data structure for files and folder tree?文件和文件夹树的数据结构?
【发布时间】:2021-10-21 10:49:42
【问题描述】:

对于python,是否有任何通用的数据结构来表示所有操作系统中文件系统中的树?

我目前使用字典并以这种方式存储树。

C/
├─ C1
├─ C3/
│  ├─ C31
tree = 

{"title": "root",
 "child": [
     {"title": "C",
      "child": [{"title": "C1"

                 },
                {"title": "C3",
                 "child": [
                     {"title": "C31"

                      }
                 ]
                 }
                ]
      }
 ]}

但是,这种幼稚的方式缺少很多功能,比如比较两棵树,计算文件数量等。

是否有任何包可以执行这些功能并具有专门处理文件夹和文件树的数据结构?

【问题讨论】:

标签: python python-3.x directory directory-structure


【解决方案1】:

脑海中浮现出一些想法:

  1. 如果这只是在内存中,您可以通过执行以下操作以更传统的 OOP 方式创建 树:

    class Dir:
    
        parent : Dir
        children : List[Dir]
    
        def __init__(self, parent=None, children=[])
            self.parent = parent
            self.children = children
    
        # etc, those nice member functions below
    
  2. 您还可以将树表示为 list 的字符串,并让文件夹成为纯语法结构:

    ["thing/files/file_a.py", "thing/files/file_2.py", ...]
    

解释文件夹的数量、子树中的子节点以及其他任何内容,都可以通过解析完整的文件或文件夹名称来完成。

  1. 在 2 的基础上,如果您需要实际使用文件夹的属性,例如权限,您可以改为选择 dict,其中文件或文件夹名称是键。
    {
       "thing/files/file_a.py" : { ...something}
       "thing/files" : {...something else}
    }
    

当您不只是在内存中工作时,最后两种方法可以很好地工作,例如 REST API。您也可以使用元组作为键来完成这两种操作。

  1. 在我看来,任意深度的嵌套字典很少是最好的方法。上面提出的所有解决方案实际上都在同一个线程:将您的树表示为一组关系而不是某种组合。

根据您实际尝试通过存储文件夹结构来完成的工作,可能会有更好的解决方案。 (也许你的是最好的。)但是,一般来说,创造性地思考一下实际需要存储哪些类型的数据会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2021-04-04
    • 2012-06-02
    • 1970-01-01
    相关资源
    最近更新 更多