0

ディレクトリツリー構造を実装し、この構造のインポートを「奇妙な方法」でサポートするひどいシステムを使用しています。インポートは 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これを実装するのに助けが必要です。

すべてのヒントを高く評価します。ありがとうございました

4

2 に答える 2