Ordnerhierarchie und Dateien ändern

Code-Stücke können hier veröffentlicht werden.
Antworten
gRzN7kaG
User
Beiträge: 1
Registriert: Dienstag 15. Januar 2019, 06:56

Dienstag 15. Januar 2019, 07:18

Hallo Python Forum!

Derzeit beschäftigt mich ein Problem das die Verzeichnishierarchie betrifft.
Da ich mir sicher bin, das viele Nutzer mit os.path und/oder pathlib vor einer steilen Lernkurve stehen, denke ich das dieser Post angemessen ist.

Es liegt folgende Verzeichnisstruktur vor:

Code: Alles auswählen

/root
|
------ Ordnername1
|			|---------Ordnername1
|						|---------------- Ordner mit Namen
|						|---------------- evtl. Datei mit Namen
|
------ Ordnername2
|			|---------Ordnername2
|						|---------------- Ordner mit Namen
|						|---------------- evtl. Datei mit Namen
|
------ OrdnernameX
			|---------OrdnernameX
						|---------------- Ordner mit Namen
						|---------------- evtl. Datei mit Namen
Dabei sind Ordnername1-X und der betreffende Unterordner immer gleich benannt. Die darunter liegenden Ordner und Dateien nicht.

Ziel ist es jetzt, die "untersten" Verzeichnisse und Dateien eine Hierarchieebene nach oben zu verschieben, und den "doppelten" Ordner zu löschen.

Hier mein bisheriger Ansatz:

Code: Alles auswählen

import pathlib

root = pathlib.Path.cwd() # starts in current working directory
root
children1 = [x for x in root.iterdir() if x.is_dir()] #generates a list of subdirectories
children1

for c in children1:
    child2 = [x for x in c.iterdir() if x.is_dir()] #and another list of subdirectories
    child2
    if child2:
        child3 = [x for x in child2[0].iterdir()] # now a list of directory objects
        child3
        if child3:
            for c in child3:
                print c.name
        #child2[0].replace(child2[0].parent) # Replace parent with child (axe the last folder) -> PermissionError
Ich hatte dies schon einmal in einem Skript mit os.walk() gelöst, aber es gelingt mir einfach nicht mehr :/

Danke für Anregungen!

MfG,

XX
Sirius3
User
Beiträge: 9237
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 15. Januar 2019, 13:03

@gRzN7kaG: mit rglob geht das Suchen einfacher:

Code: Alles auswählen

for path in pathlib.Path.cwd().rglob('*/*/*'): # Dateien in zwei Ordnerebenen Tiefe
    print(path.name)
Antworten