Seite 2 von 5

Re: Änderung PDF Namen

Verfasst: Montag 11. Mai 2020, 14:15
von Sirius3
Ja. Wie es besser geht, hab ich Dir doch schon gezeigt.

Re: Änderung PDF Namen

Verfasst: Montag 11. Mai 2020, 14:30
von Bebbi
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.

Re: Änderung PDF Namen

Verfasst: Montag 11. Mai 2020, 14:37
von Sirius3
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)

Re: Änderung PDF Namen

Verfasst: Montag 11. Mai 2020, 14:55
von Bebbi
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()?

Re: Änderung PDF Namen

Verfasst: Montag 11. Mai 2020, 16:45
von Sirius3
Was hast Du denn genau ausgeführt?

Re: Änderung PDF Namen

Verfasst: Dienstag 12. Mai 2020, 06:41
von Bebbi
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...

Re: Änderung PDF Namen

Verfasst: Dienstag 12. Mai 2020, 07:08
von Sirius3
Da aber die Variable `file` in meinem gesamten Code nicht vorkommt, dann kann das auch nicht der Code sein, den Du ausgeführt hast. 1:1 stimmt also nicht. Daher ja meine Frage, was Du exakt und genau getan hast?

Re: Änderung PDF Namen

Verfasst: Dienstag 12. Mai 2020, 07:38
von Bebbi
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.

Re: Änderung PDF Namen

Verfasst: Dienstag 12. Mai 2020, 08:07
von Sirius3
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.

Re: Änderung PDF Namen

Verfasst: Dienstag 12. Mai 2020, 08:16
von Bebbi
Ich muss das Ganze definitiv noch einmal durchgehen wenn es läuft. Was ich nicht begreiffe ist, dass er bei print(), die gewünschten Ergebnisse bringt, dies dann aber nicht umsetzen kann

Re: Änderung PDF Namen

Verfasst: Dienstag 12. Mai 2020, 08:41
von Sirius3
Du mußt exakter lesen. Der Computer ist jedenfalls sehr gut darin, nur exakt das zu tun, was man ihm sagt und nicht, das was man meint.

Re: Änderung PDF Namen

Verfasst: Dienstag 12. Mai 2020, 09:04
von Bebbi
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.

Re: Änderung PDF Namen

Verfasst: Dienstag 12. Mai 2020, 09:40
von __blackjack__
@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.

Re: Änderung PDF Namen

Verfasst: Dienstag 12. Mai 2020, 10:21
von Bebbi
@_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 :-)

Re: Änderung PDF Namen

Verfasst: Mittwoch 13. Mai 2020, 10:41
von Bebbi
ES FUNKTIONIERT !!!!

DANKE

Re: Änderung PDF Namen

Verfasst: Freitag 15. Mai 2020, 12:57
von Bebbi
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

Re: Änderung PDF Namen

Verfasst: Freitag 15. Mai 2020, 13:14
von Jankie
Ich würde die Fehlermeldung mit einem try/except Abfangen und dann im except die Ausnahme dementsprechend definieren.

Re: Änderung PDF Namen

Verfasst: Freitag 15. Mai 2020, 15:11
von Bebbi

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....?

Re: Änderung PDF Namen

Verfasst: Samstag 16. Mai 2020, 11:33
von Sirius3
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.

Re: Änderung PDF Namen

Verfasst: Montag 18. Mai 2020, 12:37
von Bebbi
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.