我正在使用已经实现目录树结构并支持以“奇怪方式”导入此结构的糟糕系统,因为 import 仅支持 format child;parent
。导入约束:
- 子项必须具有唯一名称
- 如果父项重复,则在找到的第一个父项下导入子项
假设要创建以下目录结构
root
|-- A
| |-- aa
| | |-- cc
| | `-- dd
| `-- bb
| `-- ee
`-- B
|-- aa
| |-- cc
| `-- dd
`-- bb
`-- FF
默认导入的外观如何,它不起作用或产生错误的表示:
child;parent
root
A;root
aa;A
cc;aa
dd;aa
bb;A
ee;bb
B;root
aa;B <-- duplicated child item does not work
cc;aa <-- duplicated entry - system saves it under A instead of under B
dd;aa <-- duplicated entry - system saves it under A instead of under B
bb;B
FF;bb <-- system saves it under A instead of under B
错误的表示
root
|-- A
| |-- aa
| | |-- cc
| | `-- dd
| `-- bb
| |-- FF
| `-- ee
`-- B
`-- aa
|-- cc
`-- dd
为了解决这个问题,我决定用唯一的字符串=id
+ 额外的更改(更短的名称等以满足系统要求)重命名每个文件夹并将其导入系统,然后=id
通过数据库删除。
然后导入对看起来像:
child;parent
root;
A==1;root=0
aa=2;A=1
cc=3;aa=2
dd=4;aa=2
bb=5;A=1
ee=7;bb=3
B=8;root=0
aa=9;B=8
cc=10;aa=9
dd=11;aa=9
bb=12;B=8
FF=13;bb=12
并且结构如愿
root=0
|-- A=1
| |-- aa=2
| | |-- cc=3
| | `-- dd=4
| `-- bb=5
| `-- ee=7
`-- B=8
|-- aa=9
| |-- cc=10
| `-- dd=11
`-- bb=12
`-- FF=13
但是,我需要使用原始结构而不重命名它。
我有一个想法,我可以使用树数据结构将结构保留在内存中,但我陷入了实现中。
我想使用os.walk('root')
,treelib
但我需要帮助来实现它。
高度赞赏所有提示。谢谢