Änderung PDF Namen
Die Synthax sollte doch sein:
for variable in Sequenz:
Anweisung 1
else:
Else Anweisung
Auf meinen Code müsste das dann doch irgendwie so aussehen...was natürlich total falsch ist
for variable in Sequenz:
Anweisung 1
else:
Else Anweisung
Auf meinen Code müsste das dann doch irgendwie so aussehen...was natürlich total falsch ist
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')
for new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/{}_{}_{}{}'.format(date, name, num, filename.suffix)
else new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/{}_{}_{}{}{i+1}'.format(date, name, num, filename.suffix)
new_path = filename.parents[1] / "Farbe_rot" / new_name
filename.rename(new_name)
das Ganze Python ist so umfangreich man weiss überhaupt nicht wo man beginnen soll. Zu Beginn steht man immer an der Wand, liegt aber wohl an mir.
Zuerst muss ich die Liste definieren z.B.
x = [1,2,3,4,5,6,7,8,9,10]
dann kann ich mit folgendem Befehl die Werte abrufen:
for y in x:
print(y)
dann sollte ich die Werte von x erhalten. Mit range() könnte ich die Ausgabe eingrenzen.
x = [1,2,3,4,5,6,7,8,9,10]
dann kann ich mit folgendem Befehl die Werte abrufen:
for y in x:
print(y)
dann sollte ich die Werte von x erhalten. Mit range() könnte ich die Ausgabe eingrenzen.
Mit range begrenzt man nichts, sondern generiert etwas. Nämlich Sequenzen von Zahlen.
Schau mal in die Dokumentation.
Damit kannst du dir das Binden einer per Hand geschriebenen Liste an x sparen. Es reicht, wenn du mit der for-Schleife über das läufst, was range dir liefert.
Schau mal in die Dokumentation.
Damit kannst du dir das Binden einer per Hand geschriebenen Liste an x sparen. Es reicht, wenn du mit der for-Schleife über das läufst, was range dir liefert.
In meinem Fall würde ich ja auf die Namen der Dateien im entsprechenden Ordner beziehen und dann dem Programm mitteilen, dass wenn der neu zu erstellende Namen bereits vorhanden ist dieser mit einer fortlaufenden Zahl zu ergänzen ist.
ich könnte also for filename in BESTELL_Path['P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/{}_{}_{}{}'] ergänzen....?!?! Damit würde er unter diesem Pfad suchen ob der Name bereits existiert, falls nein kann der Name wie oben beschrieben gespeichert werden falls nein folgt ursprünglicher Name +1. Macht das Sinn?
ich könnte also for filename in BESTELL_Path['P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/{}_{}_{}{}'] ergänzen....?!?! Damit würde er unter diesem Pfad suchen ob der Name bereits existiert, falls nein kann der Name wie oben beschrieben gespeichert werden falls nein folgt ursprünglicher Name +1. Macht das Sinn?
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 = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/{}_{}_{}{}'.format(date, name, num, filename.suffix)
new_path = filename.parents[1] / "Farbe_rot" / new_name
for filename in BESTELL_PATH ['P:/KA Hauptordner/Empfang/Ordner Bebbi/Bestellungen/{}_{}_{}{}']
filename.rename(new_name)
@Beppi: warum versuchst Du nun wieder drei Schritte auf einmal zu machen? Und Syntax raten ist selten ein guter Weg, um ein funktionierendes Programm zu schreiben.
Wie würdest Du mit Hilfe einer for-Schleife Dateinamen erzeugen, die eine fortlaufende Nummer enthalten?
Wie würdest Du mit Hilfe einer for-Schleife Dateinamen erzeugen, die eine fortlaufende Nummer enthalten?
@Sirius3, ich weiss, das ist leider mein Problem.
Also ich habe jetzt einen String erstellt mit Namen, was der gesuchten Lösung wohl näher kommt. Danach habe ich versucht diesen Namen eine Nummer zuzuführen. Das Ganze sieht so aus, bringt aber noch nicht die gewünschte Lösung.
Also ich habe jetzt einen String erstellt mit Namen, was der gesuchten Lösung wohl näher kommt. Danach habe ich versucht diesen Namen eine Nummer zuzuführen. Das Ganze sieht so aus, bringt aber noch nicht die gewünschte Lösung.
Code: Alles auswählen
name = ('rot','grün','gelb','blau')
i = 1
y = (i+1)
new_name = [name]+[y]
print(new_name)
Das Ergebnis ist wie folgt
[('rot', 'grün', 'gelb', 'blau'), 2]
>>>
Irgendwie verzettelst du dich und rätst dann Code und Syntax.
So wird das nicht funktionieren.
Und wie genau soll dir das helfen?
Ich kann daraus noch nicht einmal ableiten, was du überhaupt vor hattest und wie das zu deinem vorherigen Problem passt.
Sirius3 hat es doch bereits gesagt: Löse das große Problem indem du es in Teilprobleme unterteilst und diese Teilprobleme löst.
Er hat dir sogar gesagt, welches der sinnvollste nächste Schritt wäre.
Nur machst du etwas ganz anderes. Wie genau sollen wir dann helfen?
So wird das nicht funktionieren.
Code: Alles auswählen
name = ('rot','grün','gelb','blau') # Ein Tuple mit Elementen wird erstellt
i = 1 # Der Wert 1 wird an i gebunden
y = (i+1) # Der Wert 2 wird an y gebunden
new_name = [name]+[y] # Es wir der Tuple 'name' und der Wert 2 in eine Liste gepackt und an new_name gebunden.
Ich kann daraus noch nicht einmal ableiten, was du überhaupt vor hattest und wie das zu deinem vorherigen Problem passt.
Sirius3 hat es doch bereits gesagt: Löse das große Problem indem du es in Teilprobleme unterteilst und diese Teilprobleme löst.
Er hat dir sogar gesagt, welches der sinnvollste nächste Schritt wäre.
Nur machst du etwas ganz anderes. Wie genau sollen wir dann helfen?
also ich habe mit folgendem String begonnen
x = [1,2,3,4,5,6,7,8,9,10]
Danach sollte ich den Variablen gute Namen geben. Ich habe mich für die Farben entschieden, ob das gut ist naja.
x = ['rot','grün','gelb','blau']
mit print(x) kommen dann die entsprechenden Werte. Jetzt müsste ich doch aber irgendwie die Zahl dazu bekommen und dies sogar aufsteigend....
x = [1,2,3,4,5,6,7,8,9,10]
Danach sollte ich den Variablen gute Namen geben. Ich habe mich für die Farben entschieden, ob das gut ist naja.
x = ['rot','grün','gelb','blau']
mit print(x) kommen dann die entsprechenden Werte. Jetzt müsste ich doch aber irgendwie die Zahl dazu bekommen und dies sogar aufsteigend....
Ich verstehe jetzt gar nicht mehr, was Du da eigentlich machst. Darum versuch ich das, was ich verstanden habe, mal aufzuschreiben.
Du hast einen Dateinamen:
Der soll jetzt noch mit einer laufenden Nummer erweitert werden:
Nächster Schritt wäre, diesen `index` mit einer for-Schleife hochzählen zu lassen, jeweils einen new_name erzeugen und versuchen, die Datei in diesen Namen umzubenennen, wenn das klappt, kann man die for-Schleife abbrechen.
Für Dich hängt es aber noch am ersten Schritt: jeweils einen new_name mit Index erzeugen.
Du hast einen Dateinamen:
Code: Alles auswählen
new_name = '{}_{}_{}{}'.format(date, name, num, filename.suffix)
Code: Alles auswählen
new_name = '{}_{}_{}_{}{}'.format(date, name, num, index, filename.suffix)
Für Dich hängt es aber noch am ersten Schritt: jeweils einen new_name mit Index erzeugen.
@Beppi: Das ist kein String sondern eine Liste, die an den Namen "x" gebunden wird.
Und die Variablen sind nicht in der Liste, sondern das, woran du etwas bindest. Also das "x". Und "x" ist ein schlechter Name, weil niemand weiß, was "x" ist.
Aber wie ich dir schon einmal schrieb: Du brauchst keine Liste von Zahlen. Dafür gibt es range.
Und die Variablen sind nicht in der Liste, sondern das, woran du etwas bindest. Also das "x". Und "x" ist ein schlechter Name, weil niemand weiß, was "x" ist.
Aber wie ich dir schon einmal schrieb: Du brauchst keine Liste von Zahlen. Dafür gibt es range.
Code: Alles auswählen
for number in range(1, 11):
print(number)
@Sirius3, genau das wäre das Ziel. Der new_name wird mit einem weiteren Teil ergänzt { } welcher die aufsteigende Zahl beinhalten soll sofern der neu zu erstellende Name bereits existiert.
Die Generierung der Nummer läuft über eine for-Schlaufe, so habe ich das jedenfalls verstanden. Wenn ich nach for Schlaufen google kommen unzählige Beiträge aber ich finde nur range. Von ranges spricht ja auch Sparrow, aber weshalb muss ich ein Range definieren? Ich weiss ja nicht wie viele Dateien den gleichen Namen haben würden. Es könnten ja theoretisch 100 sein. Dann wäre der Range vielleicht zu klein. Ich begreife das nicht.
Die Generierung der Nummer läuft über eine for-Schlaufe, so habe ich das jedenfalls verstanden. Wenn ich nach for Schlaufen google kommen unzählige Beiträge aber ich finde nur range. Von ranges spricht ja auch Sparrow, aber weshalb muss ich ein Range definieren? Ich weiss ja nicht wie viele Dateien den gleichen Namen haben würden. Es könnten ja theoretisch 100 sein. Dann wäre der Range vielleicht zu klein. Ich begreife das nicht.
Also dann habe ich untenstehenden Befehl, mit der zusätzlichen {} welcher als Platzhalter für den Index dient.
new_name = '{}_{}_{}_{}{}'.format(date, name, num, index, filename.suffix)
mit einer range z.B. (1, 11) gebe ich dem System die Information, dass der Index sich auf dieses Range beziehen soll. Dies könnte irgendwie so aussehen, oder?.
index = range(1, 11)
new_name = '{}_{}_{}_{}{}'.format(date, name, num, index, filename.suffix)
mit einer range z.B. (1, 11) gebe ich dem System die Information, dass der Index sich auf dieses Range beziehen soll. Dies könnte irgendwie so aussehen, oder?.
index = range(1, 11)
da habe ich eines meiner Probleme. Ich habe jetzt dem System gesagt, dass die Werte für Index aus dem range(1, 11) kommen sollen. Irgendwie muss ich ja definieren, dass wenn der Name vorhanden ist der Index generiert werden muss und sonst nicht. Entsprechend habe ich folgendes:
Bedingung: Name bereits vorhanden
wenn Ja: Ergänzen mit dem Index
wenn Nein: new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}{}'.format(date, name, num, index, filename.suffix), ohne Angabe des Index
Wie ich aber dies in eine Formel verpacke....
Bedingung: Name bereits vorhanden
wenn Ja: Ergänzen mit dem Index
wenn Nein: new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}{}'.format(date, name, num, index, filename.suffix), ohne Angabe des Index
Wie ich aber dies in eine Formel verpacke....
Ich hab wieder versucht etwas einzubauen, wohl wieder zu viel.... Das sieht jetzt wie folgt aus:
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('red', 'rot')
for index in range(1, 11):
new_name = 'P:/KA Hauptordner/Empfang/Ordner Bebbi/{}_{}_{}_{}{}'.format(date, name, num, index, filename.suffix)
new_path = filename.parents[1] / "Farbe_rot" / new_name
filename.rename(new_name)
[code end]
Das ist natürlich noch nicht richtig, da er mir nun folgende Meldung bringt:
Traceback (most recent call last):
File "C:\Users\SM\AppData\Local\Programs\Python\Python38-32\Python Test 2.py", line 10, 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)
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden: 'P:\\KA Hauptordner\\Empfang\\Ordner Bebbi\\20200507_Color_red_15289_1_1.pdf' -> 'P:/KA Hauptordner/Empfang/Ordner Bebbi/20200507_Color_red_2.pdf'
>>>
momentan habe ich den Überblick sowieso verloren.