Änderung PDF Namen
Das hast Du, das stimmt.
In der Zwischenzeit habe ich - so glaube ich zumindest - auch herausgefunden was Du mit "Du mußt schon den absoluten Pfad angeben." gemeint hast. In erwähntem Ordner befinden sich unzählige (ein bisschen übertrieben aber es sind sehr viele) Dateien. Von der Synthax her sind diese jetzt gleich gegliedert was gut ist. Bei name.replace() müsste ich jetzt den gesamten Pfad erfassen. Wenn ich also z.B. folgende Dateien im Ordner habe:
20200507-Color_red-15289
20200509-Color_red-15289
20200510-True_pink-15289
20200515-Color_red-15289
Kann ich den Pfad dann wie folgt erfassen?: name.replace(r'P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/*_Color_red_*_*_*.pdf',r'P:/KA Hauptordner/Empfang/Ordner Bebbi/Farbe_rot/*_Kontoauszug_*_*_*.pdf')
Es sollen ja nur diejenigen Dateien mit Color_red umgeschrieben werden und der Rest soll gleich bleiben.
In der Zwischenzeit habe ich - so glaube ich zumindest - auch herausgefunden was Du mit "Du mußt schon den absoluten Pfad angeben." gemeint hast. In erwähntem Ordner befinden sich unzählige (ein bisschen übertrieben aber es sind sehr viele) Dateien. Von der Synthax her sind diese jetzt gleich gegliedert was gut ist. Bei name.replace() müsste ich jetzt den gesamten Pfad erfassen. Wenn ich also z.B. folgende Dateien im Ordner habe:
20200507-Color_red-15289
20200509-Color_red-15289
20200510-True_pink-15289
20200515-Color_red-15289
Kann ich den Pfad dann wie folgt erfassen?: name.replace(r'P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/*_Color_red_*_*_*.pdf',r'P:/KA Hauptordner/Empfang/Ordner Bebbi/Farbe_rot/*_Kontoauszug_*_*_*.pdf')
Es sollen ja nur diejenigen Dateien mit Color_red umgeschrieben werden und der Rest soll gleich bleiben.
Nein, soetwas geht nicht mit replace. Was geht, hab ich Dir doch schon gezeigt. Dass das absolute Pfade sind, ist bei pathlib fast egal, weil man mit den entsprechenden Methoden nur den Dateinamen verarbeitet; oder falls Du auch den Pfad ändern willst, das per parents, oder / ".." / oder ähnlichem machen kannst:
Code: Alles auswählen
from pathlib import Path
BESTELL_PATH = Path('P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen')
for filename in BESTELL_PATH.glob("*_Color_red_*.pdf"):
date, name, num, can1, can2 = filename.stem.split('_')
name = name.replace('red', 'rot')
new_name = '{}_{}_{}{}'.format(date, name, num, filename.suffix)
new_path = filename.parents[1] / "Farbe_rot" / new_name
filename.rename(new_name)
Danke Siruis3
Was ich jetzt einfach nicht verstehe. Wenn ich Deinen Code im Print anschaue, dann wird das Resultat genau so angezeigt wie gewünscht. Möchte ich es allerdings ausführen lassen kommt folgende Meldung:
file.rename(new_name)
NameError: name 'file' is not defined
>>>
Weshalb denn das und weshalb gibt es keine Meldung beim Print()?
Was ich jetzt einfach nicht verstehe. Wenn ich Deinen Code im Print anschaue, dann wird das Resultat genau so angezeigt wie gewünscht. Möchte ich es allerdings ausführen lassen kommt folgende Meldung:
file.rename(new_name)
NameError: name 'file' is not defined
>>>
Weshalb denn das und weshalb gibt es keine Meldung beim Print()?
Ich habe Deinen Code kopiert (wie ich lernen musste, macht Abschreiben ja keinen Sinn).
wenn ich am Schluss des Code print(rename(new_name)) wird das Ergebnis wie gewünscht angezeigt. Behalte ich Deinen Code 1 zu 1 bei, dann sollte er doch die Dateien umschreiben.....oder nicht? Dann folgt hingegen die Fehlermeldung...
wenn ich am Schluss des Code print(rename(new_name)) wird das Ergebnis wie gewünscht angezeigt. Behalte ich Deinen Code 1 zu 1 bei, dann sollte er doch die Dateien umschreiben.....oder nicht? Dann folgt hingegen die Fehlermeldung...
Ja, stimmt. Zum verzweifeln. Du hast natürlich 'filename' geschrieben. Ich war lange der Meinung, dass der Lerneffekt grösser ist wenn man die Codes abschreibt, das macht aber - zumindest bei mir - definitiv keinen Sinn. Mit 'filename' erscheint jetzt folgende Meldung:
Traceback (most recent call last):
File "C:\Users\SM\AppData\Local\Programs\Python\Python38-32\rename_test_1.py", line 9, in <module>
filename.rename(new_name)
File "C:\Users\SM\AppData\Local\Programs\Python\Python38-32\lib\pathlib.py", line 1340, in rename
self._accessor.rename(self, target)
OSError: [WinError 17] Das System kann die Datei nicht auf ein anderes Laufwerk verschieben: 'P:\\KA Hauptordner\\Empfang\\Ordner Bebbi\\Bestellungen\\20200430_Color_red_1622244-001_6396015_000000.pdf' -> '20200430_Farbe_rot_1622244-001.pdf'
Es muss ja nichts auf ein anderes Laufwerk kopiert werden. Die Datei kann im bestehenden Ordner "überschrieben" werden.
Traceback (most recent call last):
File "C:\Users\SM\AppData\Local\Programs\Python\Python38-32\rename_test_1.py", line 9, in <module>
filename.rename(new_name)
File "C:\Users\SM\AppData\Local\Programs\Python\Python38-32\lib\pathlib.py", line 1340, in rename
self._accessor.rename(self, target)
OSError: [WinError 17] Das System kann die Datei nicht auf ein anderes Laufwerk verschieben: 'P:\\KA Hauptordner\\Empfang\\Ordner Bebbi\\Bestellungen\\20200430_Color_red_1622244-001_6396015_000000.pdf' -> '20200430_Farbe_rot_1622244-001.pdf'
Es muss ja nichts auf ein anderes Laufwerk kopiert werden. Die Datei kann im bestehenden Ordner "überschrieben" werden.
Das mit dem Abschreiben und Verstehen ist schon richtig. Das Verstehen ist aber wichtiger. Dann fallen einem auch die Fehler auf, die man selbst, oder andere machen - zum Beispiel ich.
Wenn man den Code verstanden hat, indem man z.B. einzelne Zeilen im Interaktiven Interpreter ausführt und schaut, was passiert und was die einzelnen Methoden an Rückgabewerten haben, dann erkennt man relativ leicht, was denn nicht ganz stimmt.
Wenn man den Code verstanden hat, indem man z.B. einzelne Zeilen im Interaktiven Interpreter ausführt und schaut, was passiert und was die einzelnen Methoden an Rückgabewerten haben, dann erkennt man relativ leicht, was denn nicht ganz stimmt.
Das Problem ist, dass ich die Fehlermeldung nicht richtig interpretieren kann. Meiner Meinung nach muss die Datei ja nicht verschoben werden, weshalb dann der Hinweis, dass dies nicht gemacht werden kann. Ich habe versucht beim Code die Zeile mit new_path zu entfernen, was mich aber auch nicht weiterbring.
- __blackjack__
- User
- Beiträge: 14030
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Bebbi: Laut Fehlermeldung wird versucht die Datei "P:\\KA Hauptordner\\Empfang\\Ordner Bebbi\\Bestellungen\\20200430_Color_red_1622244-001_6396015_000000.pdf" nach "20200430_Farbe_rot_1622244-001.pdf" zu verschieben. Da sollte auffallen das bei der Quelle ein langer Pfad vor dem Dateinamen steht und beim Ziel nur ein Dateiname ohne Pfad. Für das Ziel wird also das aktuelle Arbeitsverzeichnis des Prozesses angenommen. Und das aktuelle Arbeitsverzeichnis scheint nicht auf Laufwerk "P:" zu liegen.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
@_blackjack_ danke, jetzt habe ich es verstanden. Macht ja eigentlich auch Sinn, dass ich genau hinschreiben muss, wo die neue Datei abgelegt werden soll. Ich dacht ursprünglich, dass sich diese Frage nicht stellt, da ja keine neue Datei erstellt sondern lediglich eine bestehende an bestehendem Ort überschrieben wird.
Ich gehe davon aus, dass die Ergänzung des Pfades bei new_path eingefügt werden muss. Falls das stimmt mache ich einmal weiter nach dem trie and error Prinzip
Ich gehe davon aus, dass die Ergänzung des Pfades bei new_path eingefügt werden muss. Falls das stimmt mache ich einmal weiter nach dem trie and error Prinzip

Hallo zusammen
Soeben habe ich bemerkt, dass das Programm noch nicht ganz optimal läuft. Es hat sich ergeben, dass durch das gewünschte Umschreiben nun mehrere Dateien den gleichen Namen haben würden, was entsprechend zu einer Fehlermeldung führt. Das System teilt mit, dass die Umwandlung nicht stattfinden kann, da dieser Name bereits existiert. Ich würde nun gerne den Code so ergänzen, dass bei Dateien mit gleichem Namen am Schluss eine fortlaufende Zahl z.B. 1 ergänzt wird.
Wie muss ich hier vorgehen?
Danke
Soeben habe ich bemerkt, dass das Programm noch nicht ganz optimal läuft. Es hat sich ergeben, dass durch das gewünschte Umschreiben nun mehrere Dateien den gleichen Namen haben würden, was entsprechend zu einer Fehlermeldung führt. Das System teilt mit, dass die Umwandlung nicht stattfinden kann, da dieser Name bereits existiert. Ich würde nun gerne den Code so ergänzen, dass bei Dateien mit gleichem Namen am Schluss eine fortlaufende Zahl z.B. 1 ergänzt wird.
Wie muss ich hier vorgehen?
Danke
Code: Alles auswählen
from pathlib import Path
BESTELL_PATH = Path('P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen')
for filename in BESTELL_PATH.glob("*_Color_red_*.pdf"):
date, name, num, can1, can2 = filename.stem.split('_')
name = name.replace('red', 'rot')
new_name = '{}_{}_{}{}'.format(date, name, num, filename.suffix)
new_path = filename.parents[1] / "Farbe_rot" / new_name
filename.rename(new_name)
[code]
Das heisst ich könnte nach new_path folgendes einfügen:
[code]
filename.rename(new_name)
except:
filename.rename(new_name)+(i+1)
[code]
Ich nehme an, dass ich mit einem Parameter wie i arbeiten muss. Wo muss ich allerdings i=i oder so einfügen....?
Für except braucht man auch einen try-Block und die Exception, die man abfangen möchte, die steht ja in der Fehlermeldung, die Du bekommst. Wie man einen Dateinamen aus mehreren Teilen zusammensetzt, weißt du schon. Dass einfach eine Zahl auf den Rückgabewert von rename zu addieren nicht richtig sein kann, ... statt zu raten nimm das was Du schon kennst und modifizierte es. Für i brauchst Du noch eine Schleife, den die Datei mit der 1 könnte ja auch schon existieren.
Habe wieder einmal etwas versucht zu verbessern. Jetzt stehe ich aber mit der Schleife für i im Niemandsland
Code: Alles auswählen
from pathlib import Path
BESTELL_PATH = Path('P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen')
for filename in BESTELL_PATH.glob("*_color_red_*.pdf"):
date, name, num, can1, can2 = filename.stem.split('_')
name = name.replace('red', 'rot')
while(i==1):
try: new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/{}_{}_{}{}'.format(date, name, num, filename.suffix)
except: new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/{}_{}_{}{}{i+1}'.format(date, name, num, filename.suffix)
while(i+1):
new_path = filename.parents[1] / "Farbe_rot" / new_name
filename.rename(new_name)
Auf obigen Code kommt folgende Fehlermeldung:
Traceback (most recent call last):
File "C:/Users/SM/AppData/Local/Programs/Python/Python38-32/Python Test 2.py", line 7, in <module>
while(i==1):
NameError: name 'i' is not defined
>>>
Ich denke es hat im Code noch einige Fehler. Ohne die Schleife komme ich aber nicht weiter.