Verschieben von PDF-Dokumenten in Ordner

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
FGKey
User
Beiträge: 3
Registriert: Donnerstag 25. Juni 2020, 14:46

Hallo Zusammen,
Ich bin Anfänger im Umgang mit Python und wollte auf diese Weise eine Frage ins Forum platzieren. Ich hoffe ihr könnt mir bei meinem Problem helfen.
Mein Problem lautet folgendermassen:
Ich muss ein Dokument in einen Ordner verschieben. Das Problem ist jedoch, dass das Dokument im Namen gewisse Merkmale hat, welche auf die Ordner hinweist, in welche das Dokument verschoben werden muss.
Beispiel:
Dokument: 123_Beleg_Jahr2020 (Nummer_Name_Jahr)
Ordner: 123
Unterordner: Jahr2020
Unterunterordner: Beleg

Hat es einen Befehl / Code, welcher Folgendes lösen könnte?
«Verschiebe das Dokument 123_Beleg_Jahr2020 in den Unterunterordner, welcher im Ordner mit der gleichen Nummer wie das Dokument und im Unterordner mit dem gleichen Jahr wie das Dokument ist.
Da ich viele einzelne Dokumente habe, bräuchte ich einen Allgemeinen Code und keinen, welcher diese spezifische Nummer enthält.

Vielen Dank für eure Hilfe!!

Gruss
Benutzeravatar
sparrow
User
Beiträge: 4237
Registriert: Freitag 17. April 2009, 10:28

Natürlich geht das.

Im ersten Schritt musst du dir aus dem Dateinamen die nötigen Informationen suchen.
Anschließend musst du schauen, ob die entsprechende Ordnerstruktur schon da ist, diese ggf. anlegen und die Datei verschienben.

Woran scheiterst du denn?
Sirius3
User
Beiträge: 17831
Registriert: Sonntag 21. Oktober 2012, 17:20

Es gibt keinen Befehl, der genau das macht, was Du willst. Das musst Du selbst programmieren. Schau dir dazu in der Dokumentation DAAD Modul pathlib an. Du brauchst Path.stem, str.split, Path.mkdir und Path.rename.
FGKey
User
Beiträge: 3
Registriert: Donnerstag 25. Juni 2020, 14:46

@sparrow
Vielen Dank für deine Antwort. Ich habe es mit «import os» usw. versucht und konnte die Ordner problemlos verschieben. Dabei musste jedoch den genauen Namen angeben, wie im obigen Beispiel 123_. Da ich jedoch sehr viele solche unterschiedlichen Dokumente habe, wäre es sinnvoll einen Befehl zu haben, welcher dazu da ist, den gleichen Namen mit dem gleichen Ordner zu verbinden und nicht eine konkrete Zahl mit dem spezifischen Ordner. Ich entschuldige mich für die ungenauen Angaben, da ich es selber noch nicht besser verstehe. :D

@Sirius3

Danke für deinen Input. Ich werde mich informieren und die Dokumentation anschauen. Ich hoffe, dass ich dort was finden.
Gruss
Benutzeravatar
DeaD_EyE
User
Beiträge: 1038
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Code: Alles auswählen

from pathlib import Path


file = Path("123_Beleg_Jahr2020.xlsx")

print(file.stem)
print(file.stem.split("_"))

lfdn, beleg, jahr = file.stem.split("_")
lfdn = int(lfdn) # nun ist 123  ein int
# muss aber nicht umgewandelt werden, wenn man nicht danach sortieren will


# jahr muss aus dem string entfernt werden
print(jahr)

jahr = jahr.lower().replace("jahr", "")
print(jahr) # jahr ist immer noch ein str
# wenn nur der Ordner 2020 angelegt werden soll, braucht man ihn auch nicht umzuwandeln
Um Dateien in einem Pfad zu finden, gibt es bei dem Path objekt die Methode glob und rglob.

Code: Alles auswählen

for file in Path("verzeichnis").glob("*.xlsx"):
    print(file)
Hier ein paar weitere Erklärungen zur pathlib: https://realpython.com/python-pathlib/
Paar wichtige Attribute und Methoden: name, stem, suffix, rename, unlink, mkdir, touch, absolute, glob, rglob

Ein fallstrick ist Path.replace. Das kann nur funktionieren, wenn es sich auf dem gleichen Dateisystem befindet.
Wenn du z.B. mit zwei unterschiedlichen Partitionen arbeitest und die Datei "verschieben" willst, muss die Datei kopiert werden und dann vom alten Pfad gelöscht werden.
Da hilft das Modul shutil weiter. Die Funktionen shutil.copy und shutil.move sollten mittlerweile auch mit Path objekten umgehen können.
Falls mal irgendeine Funktion die Zusammenarbeit mit Path objekten verweigert, kann man es immer noch in einen str umwandeln.
Ich hoffe, dass war jetzt nicht zuviel aufeinmal.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
FGKey
User
Beiträge: 3
Registriert: Donnerstag 25. Juni 2020, 14:46

@DeaD_EyE

Wow, vielen Dank für die ausführliche Antwort!! Ich schaue es jetzt in Ruhe an und versuche es zu verstehen. Danke auf jeden Fall für die Antwort und ich würde mich wieder ans Forum wenden, wenn ich noch Hilfe brauche :D

Gruss
Antworten