Je travaille avec un système terrible qui a mis en œuvre la structure de l'arborescence de répertoires et l'importation de soutien de cette structure d'une "manière étrange", car importer support uniquement le format child;parent
. contraintes d'importation:
- éléments enfants doivent avoir nom unique
- si l'élément parent est dupliqué, l'enfant sont importées sous le premier parent trouvapython tree répertoires noms uniques, algorithmes arbre
ASSUMER ayant une structure suivante de répertoires à créer
root
|-- A
| |-- aa
| | |-- cc
| | `-- dd
| `-- bb
| `-- ee
`-- B
|-- aa
| |-- cc
| `-- dd
`-- bb
`-- FF
Comment importer par défaut importer, qui ne fonctionne pas ou produire une mauvaise représentation:
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
Wrong r ePresentation
root
|-- A
| |-- aa
| | |-- cc
| | `-- dd
| `-- bb
| |-- FF
| `-- ee
`-- B
`-- aa
|-- cc
`-- dd
Pour résoudre ce problème, j'ai décidé de renommer chaque dossier avec chaîne unique =id
+ modifications supplémentaires (nom plus court, etc. pour répondre aux exigences du système) et importé dans un système, puis retiré =id
via la base de données.
alors des paires d'importation ressemble à:
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
Et la structure est comme on le souhaite
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
Cependant, je dois travailler avec le besoin de travailler avec la structure d'origine sans le renommer.
J'ai eu l'idée que je pouvais garder la structure juste en mémoire en utilisant la structure des données arborescentes, mais je suis resté coincé dans la mise en œuvre.
Je voulais utiliser os.walk('root')
et treelib
mais j'ai besoin d'aide pour l'implémenter.
Tous les conseils sont très appréciés. Merci
Merci Mans, j'ai essayé cette approche avant, mais je trouve beaucoup de limites que même les développeurs n'ont pas pu me dire .. Et je suis dans le rôle de soutenir cette merde. J'ai trouvé le comment avec treelib, je posterai ma solution plus tard – oglop