Erstellen eines Wörterbuchs aus der Verzeichnisstruktur

Ich versuche, ein Wörterbuch zu erstellen, das so aussieht:

nodes = { 'var': { 'type': 'd', 'full_path': '/var' 'active': True 'www': { 'type': 'd', 'full_path': '/var/www', 'active': True 'index.html': { 'type': 'f', 'full_path': '/var/www/index.html', 'active': False } 'log': { 'type': 'd', 'full_path': '/var/log', 'active': False } } 'srv': { 'type': 'd', 'full_path': '/srv', 'active': True } } 

Ich brauche es, um von zwei Stücken gebaut zu werden … Das erste muss aus dem Dateisystem sein, wo alles "aktiv" ist. Die zweite muss aus einer Auflistung der vollständigen Pfade von Dateien kommen, wo alles inaktiv ist.

Damit…

 nodes = {} for f, d, r in os.walk(root_path): # append active items to nodes for f in os.system(command_that_gets_files) # append inactive items to nodes; not overwriting active 

Ich bin mir sicher, dass ich Details fehle …

One Solution collect form web for “Erstellen eines Wörterbuchs aus der Verzeichnisstruktur”

Hier ist eine Möglichkeit, die aktiven Dateien zu bekommen. Ich fand es leichter zu recurse, als die iterativen Daten von os.walk() zu verwenden. Sie können das result['stat'] Zeile result['stat'] wenn Sie weitere Informationen als Dateityp beibehalten müssen.

Jede Datei hat einen Eintrag dict:

 filename : { 'active' : True, 'full_path' = '/path/to/filename', 'type' : 'f' } 

Jedes Verzeichnis hat einen Eintrag dict:

 dirname : { 'active' : True, 'full_path' = '/path/to/dirname', 'type' : 'd', items = { 'itemname' : {...}, ... } } 

Bitte schön:

 import sys import os from stat import * import pprint def PathToDict(path): st = os.stat(path) result = {} result['active'] = True #result['stat'] = st result['full_path'] = path if S_ISDIR(st.st_mode): result['type'] = 'd' result['items'] = { name : PathToDict(path+'/'+name) for name in os.listdir(path)} else: result['type'] = 'f' return result pprint.pprint(PathToDict(sys.argv[1])) 

Ergebnis:

 {'active': True, 'full_path': '/tmp/x', 'items': {'var': {'active': True, 'full_path': '/tmp/x/var', 'items': {'log': {'active': True, 'full_path': '/tmp/x/var/log', 'items': {}, 'type': 'd'}, 'www': {'active': True, 'full_path': '/tmp/x/var/www', 'items': {'index.html': {'active': True, 'full_path': '/tmp/x/var/www/index.html', 'type': 'f'}}, 'type': 'd'}}, 'type': 'd'}}, 'type': 'd'} 
Python ist die beste Programmiersprache der Welt.