Umbenennen von PDFs

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

Ich habe bereits einige kleinere Dateien zum umbenennen von PDF Dateien erstellt und diese funktionieren auch. Bisher musste das Programm allerdings immer nur einen Namen finden und diesen umschreiben. Ich habe dafür folgenden Befehl verwendet:

"for filename in BESTELL_PATH.glob("*_Buchung_*.pdf"):
date, name, num, can1, can2 = filename.stem.split('_')
name = name.replace('Buchung', 'Buchungsbestätigung')"

Jetzt stehe ich aber vor dem - für mich leider nicht lösbaren Problem - dass der gesuchte Teil des Dateinamen nicht aus einem Wort besteht sondern aus mehreren Worten ohne Verbindungszeichen. Hier ein Beispiel:

"for filename in BESTELL_PATH.glob("*_Buchung aus Deutschland_*.pdf"):
date, name, num, can1, can2 = filename.stem.split('_')
name = name.replace('Buchung aus Deutschland', 'Buchungsbestätigung Deutschland')"

Mit der obigen Synthax kann mir das Programm die Umschreibung leider nicht vornehmen. Ich habe bereits diverses probiert wie die Lücken mit & zu verknüpfen oder mit '," etc. zu arbeiten. Leider war alles erfolglos.

Weiss jemand Rat?

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

Kannst du dein Problem bitte ohne Code erklären?
Also was genau willst du tun? Welche Lücke willst du Verknüpfen? Geht es um Leerzeichen? Die sind normaler bestandteil einer Zeichenkette:

Code: Alles auswählen

>>> a = "Dies ist eine Buchung aus Deutschland"
>>> b = a.replace("Buchung aus Deutschland", "Buchungsbestätigung Deutschland")
>>> b
'Dies ist eine Buchungsbestätigung Deutschland'
Edit:

Oder geht es um das Finden der Datei und nicht das Ersetzen?
Dann heißt deine Datei anders, denn das geht problemlos:

Code: Alles auswählen

>>> from pathlib import Path
>>> path = Path("d:")
>>> for f in path.glob("*t Leerzeichen*.txt"):
	print(f)
	
d:Datei mit Leerzeichen.txt
Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

Die Dateinamen waren bis anhin jeweils ohne Leerzeichen (z.B. Client_Statement). In diesem Fall war es mir jeweils möglich, den bestehenden Namen durch einen neuen zu ersetzen. Z.B. Client_Statement => Kundenauszug. Jetzt habe ich ein Dateiname, welcher über Leerzeichen verfügt z.B. Client Statement as of January. Mein bestehender Code, oben ersichtlich, findet jetzt aber den zu ersetzenden Namen nicht, wenn es sich dabei um Client Statement as of January handelt oder auch nur einen Textteil davon. Bei allen anderen Dateinamen, welche über keine Leerschläge verfügen läuft das Ersetzen des Namens allerdings problemlos. Zuerst muss der Code also die Datei(en) mit der Bezeichung Client Statement as of January finden und danach den bestehenden Namen, z.B. durch Kundenauszug Januar ersetzen.

Ich hoffe das ist irgendwie verständlich...
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Nein, das Problem wird nicht klar, weil wie schon sparrow gezeigt hat, sind Leerzeichen an sich kein Problem.

Also wie sieht Dein Code wirklich aus, wie sehen die Dateinamen aus, und was funktioniert dann konkret nicht?
Dabei bitte Code in Code-Tags setzen und nicht in Anführungszeichen, denn das ist kein gültiges Python.

Code: Alles auswählen

for filename in BESTELL_PATH.glob("*_Buchung aus Deutschland_*.pdf"):
    print(filename)
    date, name, num, can1, can2 = filename.stem.split('_')
    name = name.replace('Buchung aus Deutschland', 'Buchungsbestätigung Deutschland')
    print(name)
Also, wird bei Deinem Beispiel `filename` korrekt ausgegeben? Wird `name` korrekt ausgegeben? Wo ist das konkrete Problem?
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo Bebbi,

wenn Du erst die Leerzeichen durch Untersriche ersetzen willst:

Code: Alles auswählen

from pathlib import Path

verzeichnis = Path('/daten')
for file in Path.glob(verzeichnis, '*.txt'):
    print(file)
    leerzeichen = ' '
    if leerzeichen in str(file):
        print("leerzeichen gefunden")
        neuer_name = str(file).replace(' ', '_')
    print(neuer_name)

Ausgabe:    
/daten/Link HP Produkte.txt
leerzeichen gefunden
/daten/Link_HP_Produkte.txt
Gruss Peter
Antworten