文件和文件夹树的数据结构?
Data structure for files and folder tree?
对于python,在所有操作系统的文件系统中,是否有通用的数据结构来表示文件系统中的树?
我目前用的是字典,树就是这样存储的
C/
├─ C1
├─ C3/
│ ├─ C31
tree =
{"title": "root",
"child": [
{"title": "C",
"child": [{"title": "C1"
},
{"title": "C3",
"child": [
{"title": "C31"
}
]
}
]
}
]}
然而,这种幼稚的方式缺少很多功能,例如比较两棵树,计算文件数量等
是否有任何包可以执行这些功能并具有专门处理文件夹和文件树的数据结构?
想到几个想法:
如果这只是在内存中,您可以通过执行以下操作以更传统的 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
您还可以将您的树表示为 list
个字符串 ,并让文件夹成为纯语法结构:
["thing/files/file_a.py", "thing/files/file_2.py", ...]
解释文件夹的数量、子树中的子项以及其他任何内容,可以通过解析完整的文件或文件夹名称来完成。
- 在 2 的基础上,如果您需要实际使用文件夹的属性,例如权限,您可以改为选择
dict
,其中文件或文件夹名称是键 。
{
"thing/files/file_a.py" : { ...something}
"thing/files" : {...something else}
}
当您不只是在内存中工作时,这最后两种方法很有效,例如,REST API。您也可以使用元组作为键。
- 在我看来,任意深度的嵌套字典很少是最好的选择。上面提出的所有解决方案实际上都在同一个线程上:将您的树表示为一组关系而不是某种组合。
根据您实际尝试通过存储文件夹结构实现的目标,可能会有更好的解决方案。 (也许你的是最好的。)但是,一般来说,创造性地思考实际需要存储的数据类型会有所帮助。
对于python,在所有操作系统的文件系统中,是否有通用的数据结构来表示文件系统中的树?
我目前用的是字典,树就是这样存储的
C/
├─ C1
├─ C3/
│ ├─ C31
tree =
{"title": "root",
"child": [
{"title": "C",
"child": [{"title": "C1"
},
{"title": "C3",
"child": [
{"title": "C31"
}
]
}
]
}
]}
然而,这种幼稚的方式缺少很多功能,例如比较两棵树,计算文件数量等
是否有任何包可以执行这些功能并具有专门处理文件夹和文件树的数据结构?
想到几个想法:
如果这只是在内存中,您可以通过执行以下操作以更传统的 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
您还可以将您的树表示为
list
个字符串 ,并让文件夹成为纯语法结构:["thing/files/file_a.py", "thing/files/file_2.py", ...]
解释文件夹的数量、子树中的子项以及其他任何内容,可以通过解析完整的文件或文件夹名称来完成。
- 在 2 的基础上,如果您需要实际使用文件夹的属性,例如权限,您可以改为选择
dict
,其中文件或文件夹名称是键 。{ "thing/files/file_a.py" : { ...something} "thing/files" : {...something else} }
当您不只是在内存中工作时,这最后两种方法很有效,例如,REST API。您也可以使用元组作为键。
- 在我看来,任意深度的嵌套字典很少是最好的选择。上面提出的所有解决方案实际上都在同一个线程上:将您的树表示为一组关系而不是某种组合。
根据您实际尝试通过存储文件夹结构实现的目标,可能会有更好的解决方案。 (也许你的是最好的。)但是,一般来说,创造性地思考实际需要存储的数据类型会有所帮助。