Aufgabenstellung:
Ich möchte gerne aus einer json Datei mit einer Verzeichnisstruktur Verzeichnisse in einem Projektorder erstellen.
Dazu habe ich eine Klasse Folder mit einer Methode create_folder erstellt.
Über ein Script lese ich das json File ein, erstelle Objekte der Klasse Folder und erstelle die Verzeichnisse, was auch
prima klappt. Da die Verzeichnisse theoretisch beliebig viele Unterverzeichnisse haben können, bin ich mir nicht sicher
wie ich solch 'komplexe' Strukturen entwirren kann? In meinem Script schaffe ich es ja nur bis zu den ersten Unterverzeichnissen.
Frage: Wie kann ich beliebig verschachtelte Datenstrukturen in json iterieren?
Ich bin noch Python Anfänger und möchte gerne etwas lernen, darum habe ich auch eine eigene Klasse dafür erstellt, ich weiss
über ein einfaches Script mit Funktionen wäre es vermutlich einfacher.
Ich weiss auch gar nicht wo nach ich googeln soll? Evtl. könnt ihr mir ein bisschen auf die Sprünge helfen bzw. Tipps geben.
Es muss auch keine fertige Lösung sein.
Hier meine json Datei:
Code: Alles auswählen
[
{
"name": "Finanzen",
"path": "",
"children": [ { "name": "Jahresabschluesse",
"path": "Finanzen\\Jahresabschluesse"},
{"name": "Nebenkostenabrechnungen",
"path": "Finanzen\\Nebenkostenabrechnungen"}
]
},
{
"name": "Korrespondenz",
"path": "",
"children": [
{
"name": "Mieter",
"path": "Korrespondenz\\Mieter"
}
]
},
{
"name": "Mieter",
"path": "",
"children": []
},
{
"name": "Objekte",
"path": "",
"children": []
}
]
Code: Alles auswählen
import os
class Folder:
def __init__(self, name, path, children=[], proj_folder=None):
self.name = name
self.path = path if path != "" else name
self.children = children
def create_folder(self, proj_folder="prj"):
try:
os.makedirs(os.path.join(proj_folder, self.path))
except OSError as e:
print(e)
Code: Alles auswählen
import json,os
from folder import Folder
with open('json/ver_folder_struc.json', 'r') as f:
folders = json.load(f, encoding='UTF-8' )
for i in folders:
# Create rootfolders
folder = Folder(**i)
folder.create_folder()
# Create subfolders
if folder.children:
for chield in folder.children:
subfolder = Folder(**chield)
subfolder.create_folder()