Seite 1 von 1

Unterordner verschieben/kopieren

Verfasst: Freitag 26. Juni 2020, 11:29
von Enne1008
Liebe Mitglieder,

ich sitzt seit ein paar Tagen an einer kleinen Aufgabe und komme an einem Punkt nicht weiter.
Folgende Herausforderung habe ich.

Wir legen Projekte bei uns nach in folgender Hierachie ab. Projektpartner --> Projekte --> Einzelprojekt. So ist auch bei uns die Ordnerstruktur aufgebaut.

C:\Users\enrico.neubauer\PycharmProjects\verschieben\Quelle\61867_Das_Haus\Projekte\Projekt1
C:\Users\enrico.neubauer\PycharmProjects\verschieben\Quelle\61867_Das_Haus\Projekte\Projekt2

In diesen beiden Links (exemplarisch) ist der Ordner 61867... der Projektpartner und die Ordner "Projekt1" und "Projekt2" die jeweiligen Projekte.

Ich möchte nun alle Projekte aller Partner in einen einzigen separaten Ordner kopieren/verschieben

Im Ziel soll dies so aussehen.
C:\Users\enrico.neubauer\PycharmProjects\verschieben\senke\Projekt1
C:\Users\enrico.neubauer\PycharmProjects\verschieben\senke\Projekt2
.
.
.
C:\Users\enrico.neubauer\PycharmProjects\verschieben\senke\Projektn

Ich habe nun folgenden Code

Code: Alles auswählen

import os
import shutil

source = r"C:\Users\enrico.neubauer\PycharmProjects\verschieben\Quelle"
target = r"C:\Users\enrico.neubauer\PycharmProjects\verschieben\senke_1"
projects = os.listdir(source)

for project in projects:
    source_2 = os.path.join(source, project +"\\"+"Projekte"+"\\")
    shutil.move(source_2,target)

    
Es wird nun beim ersten Projekt, welches verschoben wird ein Unterordner "Projekte" angelegt, welcher bei nächste Durchlauf zur Meldung führt, dass der Pfad bereits exzistiert.

Könntet ihr mir bitte einen Tipp geben?

Besten Dank vorab.

Re: Unterordner verschieben/kopieren

Verfasst: Freitag 26. Juni 2020, 11:39
von __deets__
Dann teste doch einfach, ob der Pfad existiert, und leg den nur bei Bedarf an.

Oder du benutzt gleich das besser pathlib statt der rudimentaeren os.*-Funktionen, und kannst bei mkdir angeben, ob das Verzeichnis schon existieren darf:

https://docs.python.org/3/library/pathl ... Path.mkdir

Re: Unterordner verschieben/kopieren

Verfasst: Samstag 27. Juni 2020, 16:56
von locky20
Erst sicherstellen, ob ein Pfad bereits existiert und anschliessend die Aktion, oder verwende "try", "except" block. Macht manchmal schon Sinn, dafür ist ja auch da, um Fehler abzufangen.

Code: Alles auswählen

if not os.path.exists('/root/'):
    shutil.move('/root')

oder 

try: 
   shutil.move('root', 'new_root')
except shutil.error:
   pass
   

Re: Unterordner verschieben/kopieren

Verfasst: Samstag 27. Juni 2020, 18:53
von sparrow
@locky20: Aber so wie hier gezeigt, macht der except-Block keinen Sinn. Es gilt: Entweder man fängt einen Fehler ab und behandelt ihn, damit das Programm in einem kontrollierten Zustand weiterlaufen kann, oder man spart sich das Abfangen, der Fehler eskaliert und das Programm wird mit einer Fehlermeldung beendet.
Dein Beispiel hier verschluckt aber den Fehler. Keine Behandlung, keine Rückmeldung. Das ist nicht sinnvoll. Es ist sogar "gefährlich", denn wenn etwas schief läuft, kommt die nächste Nachfrage, warum es "einfach nicht funktioniert". Daher lieber keine nackten Excepts und keine Excepts ohne Behandlung.

Re: Unterordner verschieben/kopieren

Verfasst: Samstag 27. Juni 2020, 20:32
von lexx
Bin jetzt nicht der Profi, aber für mich sieht es so aus, als würde der source Pfad komisch zusammengesetzt.

source_2 = os.path.join(source, project +"\\"+"Projekte"+"\\")

Re: Unterordner verschieben/kopieren

Verfasst: Samstag 27. Juni 2020, 20:41
von __blackjack__
Komisch ist ein sehr nettes Wort für „falsch“. Vor allem da ja `os.path.join()` an sich ja schon verwendet wird.

Re: Unterordner verschieben/kopieren

Verfasst: Samstag 27. Juni 2020, 21:31
von lexx
Wenn ich das richtig sehe, könnte es aber durchlaufen, wenn er den dazugebastelten Teil weglässt.

Re: Unterordner verschieben/kopieren

Verfasst: Montag 29. Juni 2020, 07:04
von Enne1008
Guten Morgen,

vielen Dank für die Hinweise.
@lexx: Wenn ich den hinzugebastelten Teil weg lasse, wird die gesamte Ordnerstruktur verschoben. Ich benötige hingegen die Unterordner, welche im Ordner Projekte liegen.

Ich probiere dies nun einmal mit pathlib zulösen

Beste Grüße

Re: Unterordner verschieben/kopieren

Verfasst: Montag 29. Juni 2020, 07:50
von DeaD_EyE
Mit pathlib ist es einfacher.

Probiere mal das Globbing aus.

z.B.

Code: Alles auswählen

from pathlib import Path


source = Path(r"C:\Users\enrico.neubauer\PycharmProjects\verschieben\Quelle")
for projekt in source.glob("*\Projekte\*"):
    print(projekt)
Falls nichts ausgegeben wird, ist der Suchpfad mit den Wildcards falsch.
Da kannst du dann die Struktur so anpassen, dass dir nur die Projektverzeichnisse ausgegeben werden.

Re: Unterordner verschieben/kopieren

Verfasst: Montag 29. Juni 2020, 09:23
von lexx
Enne1008 hat geschrieben: Montag 29. Juni 2020, 07:04 Guten Morgen,

vielen Dank für die Hinweise.
@lexx: Wenn ich den hinzugebastelten Teil weg lasse, wird die gesamte Ordnerstruktur verschoben. Ich benötige hingegen die Unterordner, welche im Ordner Projekte liegen.

Ich probiere dies nun einmal mit pathlib zulösen

Beste Grüße

Warum gibst du ihn denn nicht im Source pfad an?
Oder hab ich jetzt einen Denkfehler?