Verschieben von PDF

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
Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

Hallo zusammen

Für das Verschieben von einigen PDF habe ich mir folgenden Code zusammengebastelt:

Code: Alles auswählen

import re
from pathlib import Path
import shutil

BASEPATH = Path("P:\Kito Hauptordner\Kito\Key Link\KeyLink_Belege\Python")
SOURCE_PATH = BASEPATH / "Verteilordner"
DESTINATION_PATH = Path("N:\BK\XX-00263101\Jahr 2022\2. Auszüge")
FILTERS = [
    ("2. Auszüge", "Belastungsanzeige"), 
    ("2. Auszüge", "Übersicht") 
]

def main():
    for name, customer_number in FILTERS:
        destination = DESTINATION_PATH / name
        for sourcefile in SOURCE_PATH.glob(f"*{customer_number}*.pdf"):
            sourcefile.rename(destination / sourcefile.name)

if __name__ == "__main__":
   main()
Leider kommt er mir bei der Zeile

Code: Alles auswählen

 DESTINATION_PATH = Path("N:\BK\XX-00263101\Jahr 2022\2. Auszüge") 
mit folgender Meldung:

(unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape

Hat jemand eine Ahnung woran das liegt und was ich genau ändern/anpassen muss?

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

Du kannst nicht einfach "\" in Zeichenketten verwenden. Das leitet Escape-Sequencen ein. So bedeutet \n einen Zeilenumbruch und \t ienen Tabulator. Wie soll man sonst wissen, was genau du meinst?
Entweder musst du sie maskieren oder einen raw-String mit vorgestellten r verwenden.

Das ist in diesem Fall aber überflüssig. Verwende "/" statt "\" als Pfadtrenner in Zeichenketten. Python kann damit umgehen.

Code: Alles auswählen

DESTINATION_PATH = Path("N:/BK/XX-00263101/Jahr 2022/2. Auszüge")
Und dann schauen, ob es geht.
nezzcarth
User
Beiträge: 1754
Registriert: Samstag 16. April 2011, 12:47

@sparrow: Selbst in raw Strings ist \ ein kleines bisschen speziell (s. letzter Absatz des Abschnitts), weshalb manchmal empfohlen wird, sie nicht dafür zu verwenden. Rawstrings können auch nicht auf \ enden.
Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

Sorry ich war leider längere Zeit weg, deshalb die späte Rückmeldung.

Mit dem Umstellen von \ auf / klappt es. Was mich aber noch interessieren würde, weshalb akzeptiert er beim BASEPATH: das \, beim DESTINATION_PATH aber nicht? Ergibt das einen Sinn?

Zudem teilt er mir jetzt mit, dass er die Datei nicht auf ein anderes Laufwerk verschieben darf. Weshalb soll denn das nicht möglich sein?

Besten Dank
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es sind eben nicht fuer alle \<buchstabe> besondere Funktionen hinterlegt. Je nach konkretem Pfad passiert also nichts, oder eben doch etwas. \n ist ein "newline", \t ein "tab", wenn du also einen Pfad c:\neue\tafel hast, dann sind das zwei andere Zeichen. Hast du aber c:\alter\kaffee, dann gibt's dafuer keine Ersetzung, und der Pfad ist ok.

Zu deiner Fehlermeldung kann ich nichts sagen.
Benutzeravatar
__blackjack__
User
Beiträge: 14032
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bebbi: Das sagt Dir doch die Ausnahme recht deutlich warum das nicht geht. Wobei die nicht zum gezeigten Code passt, denn da gibt es das Problem gar nicht:

Code: Alles auswählen

In [71]: from pathlib import Path                                               

In [72]: DESTINATION_PATH = Path("N:\BK\XX-00263101\Jahr 2022\2. Auszüge")

In [73]:
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten