Du hast jetzt eine for-Schleife, die Namen generiert.
Jetzt fehlt natürlich noch die Abfrage, ob das Umbenennen funktioniert hat. Denn jetzt nennst Du die Datei in ..._1 um, und dann die selbe Datei (die natürlich jetzt nicht mehr existiert) in ..._2.
Änderung PDF Namen
Ich verstehe das mit den Schleifen immer noch nicht.
Die Schleife hat zwei mögliche Resultate. Entweder wahr oder falsch.
Zu Beginn des Programmes lasse ich die Dateien umschreiben. Dann kommt die for Schleife ins Spiel. Wenn also der neue Name nicht vorhanden ist, so braucht es keine weitere Modifikation (Variante wahr). Sollte der Name bereits existieren (Variante falsch) so soll der Name mit einer Zahl ergänzt werden.
Ich habe aber keine Ahnung wie ich dies Aussage in eine Formel verpacken soll. Die Beispiele die ich auf Deutsch in Netz finde sind jeweils mit Zahlen. Z.B. steht da:
for x in range (3, 7):
print (x)
mit dem Resultat #3 #4 #5 #6
Das macht ja alles Sinn, aber wie breche ich das auf mein Problem runter???
Ich habe dem bestehenden Namen mit {} einen weiteren Wert zugeordnet, namens Index. Dieser soll aus dem Range(1, 11): generiert werden, falls es das benötigt. Wie soll ich hier eine Abfrage erstellen welche prüft of das funktioniert hat?
Die Schleife hat zwei mögliche Resultate. Entweder wahr oder falsch.
Zu Beginn des Programmes lasse ich die Dateien umschreiben. Dann kommt die for Schleife ins Spiel. Wenn also der neue Name nicht vorhanden ist, so braucht es keine weitere Modifikation (Variante wahr). Sollte der Name bereits existieren (Variante falsch) so soll der Name mit einer Zahl ergänzt werden.
Ich habe aber keine Ahnung wie ich dies Aussage in eine Formel verpacken soll. Die Beispiele die ich auf Deutsch in Netz finde sind jeweils mit Zahlen. Z.B. steht da:
for x in range (3, 7):
print (x)
mit dem Resultat #3 #4 #5 #6
Das macht ja alles Sinn, aber wie breche ich das auf mein Problem runter???
Ich habe dem bestehenden Namen mit {} einen weiteren Wert zugeordnet, namens Index. Dieser soll aus dem Range(1, 11): generiert werden, falls es das benötigt. Wie soll ich hier eine Abfrage erstellen welche prüft of das funktioniert hat?
und hier hört meine Vorstellungskraft auf. Ich weiss nicht wohin, in welcher Synthax die einzelnen Bestandteile kommen.
irgendwo müsste ich doch eine Art wenn dann - Anweisung haben. wenn der Name bereits existiert dann bestehender Name + Index. Eine For-Schleife ist ja etwas anderes als if und ifelse oder nicht?
irgendwo müsste ich doch eine Art wenn dann - Anweisung haben. wenn der Name bereits existiert dann bestehender Name + Index. Eine For-Schleife ist ja etwas anderes als if und ifelse oder nicht?
- __blackjack__
- User
- Beiträge: 14032
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Bebbi: Ja eine ``for``-Schleife ist was anderes als ``if``/``else``. Die Schleife generiert die Zahlen. Schleifen müssen aber nicht komplett durchlaufen, die kann man auch abbrechen. Ob der Name bereits existiert kann man prüfen. Sollte man vielleicht auch wenn das Crossplattform funktionieren soll, denn die Ausnahme da die Datei bereits existiert kommt nicht auf jeder Plattform.
Und ich persönlich würde deutlich mehr mit Funktionen arbeiten. Zum Beispiel hier eine Funktion die umbenennt und ggf. eine Zahl anhängt, falls das Ziel bereits existiert. In dieser Funktion sollte auch nur *das* gemacht werden. Die muss also überhaupt nichts davon wissen wie und warum man vorher die beiden Pfade, Quelle und Ziel, mal erstellt hat.
Und ich persönlich würde deutlich mehr mit Funktionen arbeiten. Zum Beispiel hier eine Funktion die umbenennt und ggf. eine Zahl anhängt, falls das Ziel bereits existiert. In dieser Funktion sollte auch nur *das* gemacht werden. Die muss also überhaupt nichts davon wissen wie und warum man vorher die beiden Pfade, Quelle und Ziel, mal erstellt hat.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Danke für Deine Antwort. Ich weiss, dass Schleifen gestoppt werden können. Aber wie gesagt, ich habe so etwas noch nie umgesetzt und bin nicht in der Lage dies mit den Angaben die ich habe das zu machen... Ich muss irgend einen anderen Weg finden.
Ich habe wieder etwas verschlimmbessert. Die Dateien werden zwar in der richtigen Reihenfolge umgeschrieben aber der Name wird nicht vom englischen ins deutsche verändert und es wird immer die Nummer 1 ergänzt. Das sollte ja nicht so sein



Code: Alles auswählen
from pathlib import Path
BESTELL_PATH = Path('P:/KA Hauptordner/Empfang/Ordner Bebbi') # Pfad des Ordners
for filename in BESTELL_PATH.glob("*_color_red_*.pdf"): # for Schleife
date, name, num, can1, can2, can3 = filename.stem.split('_') # Aufsplittung des Namens in 6 Teile
name = name.replace('red', 'rot') # Replace von red durch rot
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}'.format(date, name, num, filename.suffix) # Pfad und Zusammensetzung des neuen Namens
for index in range(1, 20): # Möglicher Indexwert
new_name = 'P:/KAHauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}{}'.format(date, name, num, index, filename.suffix) # Ergänzung des Namens mit dem Indexwert
break # For Schleife abbrechen, da Index ergänzt wurde und keine Datei gleich benannt ist
new_path = filename.parents[1] / "Farbe_rot" / new_name
print(new_name)
[code]
Die Dateien werden wie folgt umgeschrieben:
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Color_red_1.pdf
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Color_red_1.pdf
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Color_red_1.pdf
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Color_red_1.pdf
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Color_red_1.pdf
Die Idee wäre ja folgendes:
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Farbe_rot_1.pdf
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Farbe_rot_2.pdf
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Farbe_rot_3.pdf
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Farbe_rot_4.pdf
P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Farbe_rot_5.pdf
regt Euch bitte nicht auf.....
Programme machen immer genau das, was man schreibt. Die erste Zuweisung an `new_name` wird nicht benutzt. Eine for-Schleife, die immer beim ersten Durchlaufen per break verlassen wird, ist keine sinnvolle for-Schleife. Warum sollte da jemals was anderes als 1 rauskommen?
`new_name` sollte wirklich immer nur den Dateinamen enthalten, weil Du den Pfad ja später zusammensetzt.
Wenn ich das richtig sehe (und das hättest Du selbst auch einfach dadurch herausfinden können, dass Du date name und num einfach mal ausgibst), enthält `name` nicht "red" kann also auch nicht durch replace ersetzt werden.
`new_name` sollte wirklich immer nur den Dateinamen enthalten, weil Du den Pfad ja später zusammensetzt.
Wenn ich das richtig sehe (und das hättest Du selbst auch einfach dadurch herausfinden können, dass Du date name und num einfach mal ausgibst), enthält `name` nicht "red" kann also auch nicht durch replace ersetzt werden.
Ok das mit dem Replace macht Sinn, habe ich so verstanden.
Mit der ersten Zuweisung new_name meinst Du 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}'.format(date, name, num, filename.suffix)
wenn ich bei new_name den Pfad weglasse verbleibt:
new_name = '{}_{}_{}_{}'.format(date, name, num, filename.suffix)
dann müsste ich doch mit einer For-Schlaufe die Bedinungen sagen, dass wenn der Name bereits existiert er den Index anhangen soll. Irgendwie so:
for new_name in Path
new_name = '{}_{}_{}_{}'.format(date, name, num, filename.suffix) == new_name = '{}_{}_{}_{}'.format(date, name, num, filename.suffix)
was ich nicht begreiffe, ist, ich müsste doch zwei For Schleifen haben, einmal wie oben um herauszufinden ob in diesem Pfad der Name bereits existiert und einmal eine um den Index zu generieren....?!?!?
Mit der ersten Zuweisung new_name meinst Du 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}'.format(date, name, num, filename.suffix)
wenn ich bei new_name den Pfad weglasse verbleibt:
new_name = '{}_{}_{}_{}'.format(date, name, num, filename.suffix)
dann müsste ich doch mit einer For-Schlaufe die Bedinungen sagen, dass wenn der Name bereits existiert er den Index anhangen soll. Irgendwie so:
for new_name in Path
new_name = '{}_{}_{}_{}'.format(date, name, num, filename.suffix) == new_name = '{}_{}_{}_{}'.format(date, name, num, filename.suffix)
was ich nicht begreiffe, ist, ich müsste doch zwei For Schleifen haben, einmal wie oben um herauszufinden ob in diesem Pfad der Name bereits existiert und einmal eine um den Index zu generieren....?!?!?
und wie ist dafür die Syntax und wo muss das stehen? Ich kann doch auch kein Schiff zeichnen wenn ich nicht weiss wie eines aussieht. Im Netz finde ich zwar wie eine for Schleife auszusehen hat, ich kann das aber auf meine Situation mit Text nicht ummünzen.
Meiner Meinung muss das Programm bis Linie 7 so sein. Danach muss geprüft werden ob der Name bereits existiert. Wie muss ich das darstellen?
Meiner Meinung muss das Programm bis Linie 7 so sein. Danach muss geprüft werden ob der Name bereits existiert. Wie muss ich das darstellen?
Du weißt, wie eine for-Schleife aussieht und Du weißt, wie man prüft, ob eine Datei existiert. Wenn Du also weißt, wie ein Schiff aussieht und weißt, wie ein Windrad aussieht, kannst Du auch ein Schiff mit Windrad zeichnen.


Immer gut wenn andere wissen, was man weiss...
Die for Schleife wird wie folgt definiert:
for Variable in Sequenz:
Anweisung1
Anweisung2
...
Anweisung
else:
Else-Anweisung1
Else-Anweisung2
...
Else-Anweisung
bei mir also irgendwie (und hier fängt das raten an....)
for new_name in BESTELL-PATH
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}
else
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}{}
Die Antwort wird jetzt wohl sein, dass dies zwar falsch ist, ich aber alle Bestandteile kenne und ja weiss wie eine for Schlaufe aussieht. Danke. Leider habe ich weder einen Dozenten noch sonst jemand zum nachfragen. Ich bin einfach zu dumm, um die Angaben im Netz auf mein Problem umzuwandeln.
Die for Schleife wird wie folgt definiert:
for Variable in Sequenz:
Anweisung1
Anweisung2
...
Anweisung
else:
Else-Anweisung1
Else-Anweisung2
...
Else-Anweisung
bei mir also irgendwie (und hier fängt das raten an....)
for new_name in BESTELL-PATH
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}
else
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}{}
Die Antwort wird jetzt wohl sein, dass dies zwar falsch ist, ich aber alle Bestandteile kenne und ja weiss wie eine for Schlaufe aussieht. Danke. Leider habe ich weder einen Dozenten noch sonst jemand zum nachfragen. Ich bin einfach zu dumm, um die Angaben im Netz auf mein Problem umzuwandeln.
Das for-schleifen eine else-Klausel haben ist richtig, die ist aber fuer deinen Anwendungsfall komplett irrelevant. Es ist ein eher obskures Feature von Python, lass dich davon nicht vewirren. Und du bist jetzt schon ein bisschen dabei, dass man hier code-tags verwenden muss, sollte inzwischen klar sein.
Code: Alles auswählen
for new_name in BESTEL_PATH: # sieht nach Konstante aus.
if ...:
...
else:
...
Ich weiß echt nicht, wie man Dir helfen soll, wenn Du anscheinend in Schritt vor gehst und dann wieder 5 zurück.
Du hattest doch schon:
HIER fehlt noch die Prüfung ob es die Datei gibt, und falls nein, die Schleife abzubrechen.
Du hattest doch schon:
Code: Alles auswählen
for index in range(1, 20): # Möglicher Indexwert
new_name = 'P:/KAHauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}{}'.format(date, name, num, index, filename.suffix) # Ergänzung des Namens mit dem Indexwert
Ich weiss, dass es zum verzweifeln ist, das ist es für mich auch. Mein Korpus hat eine andere Form als heute Morgen...
Sorry aber jetzt habe ich wieder zwei unterschiedliche for Schlaufen. Ich habe versucht beides irgendwie in eine Form zu bringen (natürlich mit raten woher soll ich die Form sonst wissen?
).
Option 1:
Sorry aber jetzt habe ich wieder zwei unterschiedliche for Schlaufen. Ich habe versucht beides irgendwie in eine Form zu bringen (natürlich mit raten woher soll ich die Form sonst wissen?

Option 1:
Code: Alles auswählen
from pathlib import Path
BESTELL_PATH = Path('P:/KA Hauptordner/Empfang/Ordner Bebbi') # Pfad des Ordners
for filename in BESTELL_PATH.glob("*_color red_*.pdf"): # for Schleife
date, name, num, can1, can2, can3 = filename.stem.split('_') # Aufsplittung des Namens in 6 Teile
name = name.replace('_color red_', '_Farbe rot_') # Replace von red durch rot
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}'.format(date, name, num, filename.suffix) # Pfad und Zusammensetzung des neuen Namens
for index in range(0, 20):
if new_name ('{}_{}_{}{}' == '{}_{}_{}{}'):
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}{}'.format(date, name, num, index, filename.suffix)
else:
new_name = '{}_{}_{}'
break
new_path = filename.parents[1] / 'Farbe_rot' / new_name
print(new_name)
Hier erscheint folgende Fehlermeldung:
Traceback (most recent call last):
File "C:\Users\SM\AppData\Local\Programs\Python\Python38-32\Python Test 2.py", line 9, in <module>
if new_name ('{}_{}_{}{}' == '{}_{}_{}{}'):
TypeError: 'str' object is not callable
>>>
Option 2:
[code]
from pathlib import Path
BESTELL_PATH = Path('P:/KA/Empfang/Ordner Bebbi') # Pfad des Ordners
for filename in BESTELL_PATH.glob("*_color red_*.pdf"): # for Schleife
date, name, num, can1, can2, can3 = filename.stem.split('_') # Aufsplittung des Namens in 6 Teile
name = name.replace('_color red_', '_Farbe rot_') # Replace von red durch rot
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}'.format(date, name, num, filename.suffix) # Pfad und Zusammensetzung des neuen Namens
for index in range(0, 20):
new_name = 'P:/KA/Empfang/Ordner Bebbi/{}_{}_{}{}'.format(date, name, num, index, filename.suffix)
else:
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}'
break
new_path = filename.parents[1] / 'Farbe_rot' / new_name
print(new_name)
Hier passiert überhaupt nichts :cry:
Ich weiss, dass ihr das nicht nachvollziehen könnt!
Weshalb kann mir z.B. nicht jemand sagen der Befehl in Zeile X ist falsch und sollte so aussehen. Dann kann ich das einfügen, schauen ob es funktioniert und entsprechend versuchen nachzuvollziehen. Wenn wüsste ich auch ob das Windrad beim Fisch hinten oder vorne stehen muss. So wie jetzt verzettle ich mich total und habe keine Ahnung mehr was überhaupt wie aussehen soll. Ich habe schon gefühlte 100 Varianten versucht und keine scheint Sinn zu machen. Dann kommen immer die Aussagen du hast ja alles und weisst wie es aussehen sollte. Wer sagt denn das ich das weiss. Vielleicht steht das ja irgendwo aber ich sehe es nicht.....
Mein letzter Versuch war das hier - klappt natürlich nicht. Ich weiss, dass jeder von Euch den Fehler sofort sieht, ich kanns leider nicht sehen.
Mein letzter Versuch war das hier - klappt natürlich nicht. Ich weiss, dass jeder von Euch den Fehler sofort sieht, ich kanns leider nicht sehen.
Code: Alles auswählen
from pathlib import Path
BESTELL_PATH = Path('P:/KA Hauptordner/Empfang/Ordner Bebbi')
for filename in BESTELL_PATH.glob("*_color red_*.pdf"):
date, name, num, can1, can2, can3 = filename.stem.split('_')
name = name.replace('_color red_', '_Farbe rot_')
for index in range(1, 20):
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}{}'.format(date, name, num, filename.suffix)
else:
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}{}{}'.format(date, name, num, index, filename.suffix)
break
new_path = filename.parents[1] / "Farbe_rot" / new_name
print(new_name)
Das else nach dem for ist NIEMALS richtig in deinem Code. Wenn du etwas mehrfach machen willst, nimmst du eine Schleife. Wenn du etwas bedingt tun willst, nimmst du eine if-Anweisung. Wenn du etwas bedingt mehrfach tun willst, packst du die Anweisung *in* die Schleife. Wenn du etwas pruefen willst, und DANN gegebenenfalls etwas mehrfach tun, dann kommt die for-Schleife IN die if-Anweisung.
Das break ist auch falsch, oder sollen die Zeilen danach wirklich niemals ausgefuehrt werden? Dann koennen sie auch weg.
Ich rate mal, was du willst;
Das break ist auch falsch, oder sollen die Zeilen danach wirklich niemals ausgefuehrt werden? Dann koennen sie auch weg.
Ich rate mal, was du willst;
Code: Alles auswählen
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}{}'.format(date, name, num, filename.suffix)
if os.path.exists(new_name):
for i in itertools.count():
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}{}{}'.format(date, name, num, index, filename.suffix)
if not os.path.exists(new_name):
break
# ab hier ist new_name dann eindeutig