2011-01-05 18 views
2

Ich verwende zipfile und tarfile Python-Module zum Öffnen, Extrahieren und Komprimieren von Archiven.
Ich muss die Archivstruktur in einem QTreeWidget anzeigen, und ich weiß nicht weiter. Um die Infos zu bekommen benutze ich die Funktion infos(path) von this file. würde ich gerne so etwas wie diese erhalten (von Ark):
alt textVerzeichnisstruktur in einem QTreeWidget

Zum Beispiel, wenn ich diese Dateinamen erhalten: ('GCI/PyFiles/prova3.py', 'GCI/', 'GCI/PyFiles/', 'GCI/Screenshots/', 'GCI/prova2.py', 'prova.py'), ich möchte dies erhalten:

- prova.py 
- GCI/ 
    | 
    |- prova2.py 
    |- PyFiles/ 
      |- prova3.py 
    |- Screenshots/ 

in meinem QTreeWidget .

Danke, Rubik

Antwort

1

Ich bin nicht sicher, wie QTreeWidget will es Daten offhand ist, aber hier ist eine (möglicherweise schlechte Art und Weise), um die Struktur im Speicher zu bauen.

x = ('GCI/PyFiles/prova3.py', 'GCI/', \ 
    'GCI/PyFiles/', 'GCI/Screenshots/', \ 
    'GCI/prova2.py', 'prova.py') 

structure = {} 
for fn in x: 
    path = fn.split('/') 

    tmpd = structure 
    for p in path[:-1]: 
     try: 
      tmpd = tmpd[p] 
     except KeyError: 
      tmpd = tmpd[p] = {} 

    tmpd[path[-1]] = None 

Dies wird Ihnen ein Wörterbuch structure dass für jede Taste ist entweder ein anderes Wörterbuch (die einen Ordner) oder None darstellt, dass der Schlüssel eine Datei ist.

Die besseren Weg, dies zu tun, um eine Klasse wie folgt erstellen würde:

class Node(object): 
    def __init__(self): 
     self.dirs = {} 
     self.files = [] 

oder so etwas wie das, was Sie bevölkern können. Wenn ich mich an meine QT-Programmierungstage richtig erinnere, möchte das QTreeWidget eine Datenquelle, so dass Sie im Grunde herausfinden könnten, wie diese Quelle aussieht und sie entsprechend auffüllen. Es gibt auch wahrscheinlich die Option, dies zu tun,

[sp for _,sp in sorted(
     (len(splitpath),splitpath) for splitpath in 
      (path.split('/') for path in x) 
     ) 
    ] 

die Sie zurückkehren würde:

[['prova.py'], ['GCI', ''], ['GCI', 'prova2.py'], 
['GCI', 'PyFiles', ''], ['GCI', 'PyFiles', 'prova3.py'], 
['GCI', 'Screenshots', '']] 
+0

Thank you very much !! Du hast mich gerettet! – rubik