Seite 1 von 2
Re: Spezielle Daten verschieben
Verfasst: Sonntag 4. April 2021, 17:49
von __blackjack__
@Bebbi: Was ist denn Deiner Meinung nach der Unterschied zwischen umbenennen und verschieben (solange man auf dem gleichen Dateisystem bleibt)?
Re: Spezielle Daten verschieben
Verfasst: Sonntag 4. April 2021, 18:47
von Bebbi
Verstehe, habe jetzt herausgefunden, dass dies scheinbar das gleiche ist. Für mich war umbenennen bisher der Datei einen neuen Namen geben und verschieben etwas von A nach B zu bringen...
Bei sourcefile.rename() muss ich doch innerhalb der Klammer angeben von wo, nach wo die Datei verschoben werden soll oder etwa nicht? Ich meinem Beispiel also von SOURCE_PATH = BASEPATH / "Ausgangsordner" nach DESTINATION_PATH = BASEPATH / "Empfangsordner". Wenn ich aber den Befehl wie folgt schreibe sourcefile.rename(SOURCE_PATH, DESTINATION_PATH) kommt wie erwähnt die Meldung, dass ich drei Argumente geliefert habe. Aber ich habe doch lediglich SOURCE_PATH und DESTINATION_PATH als Argumente, was ist denn das dritte Argument?
Sorry für die dumme Frage, aber ich sehe es nicht.
Re: Spezielle Daten verschieben
Verfasst: Sonntag 4. April 2021, 18:54
von Bebbi
wenn ich mit ein Argument entferne und z.B. mit sourcefile.rename(destination) arbeite, was vorher auch definiert wurde, kommt wieder die Meldung, dass die Datei bereits existiert.... Going to be crazy....
Re: Spezielle Daten verschieben
Verfasst: Sonntag 4. April 2021, 19:46
von __blackjack__
@Bebbi: Methoden auf Objekten haben als erstes Argument immer das Objekt selbst. Du musst hier den kompletten Namen angeben den die Datei haben wird, nicht nur den Pfad in dem das enden soll. Sonst ist das doch auch gar nicht eindeutig, denn das würde ja funktionieren wenn es den Zielpfad nicht geben würde, und die Datei hätte dann den Namen des letzten Verzeichnisses in dem Pfad. Also eben nicht Verzeichnis denn wenn es diesen Teil nicht gibt, ist das ja gar kein Verzeichnis.
Re: Spezielle Daten verschieben
Verfasst: Sonntag 4. April 2021, 20:26
von Bebbi
also, ich habe jetzt den gesamten Pfad eingefügt:
Code: Alles auswählen
ef main():
for name, customer_number in FILTERS:
destination = DESTINATION_PATH / name
for sourcefile in SOURCE_PATH.glob(f"*{customer_number}*.docx"):
sourcefile.rename("C:/Users/Startklar/Desktop/Empfangsordner" / name)
Da ja der Code entscheiden muss in welchen Ordner es schlussendlich kommt, aufgrund der Filter, nehme ich an, dass ich am Schluss mit / name arbeiten kann...
mit der Synthax scheint aber weiterhin etwas nicht zu stimmen, da jetzt folgende Meldung kommt:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Users\Startklar\Desktop\Move_II.py", line 20, in <module>
main()
File "C:\Users\Startklar\Desktop\Move_II.py", line 17, in main
sourcefile.rename("C:/Users/Startklar/Desktop/Empfangsordner" / name)
TypeError: unsupported operand type(s) for /: 'str' and 'str'
>>>
Re: Spezielle Daten verschieben
Verfasst: Sonntag 4. April 2021, 23:22
von __blackjack__
@Bebbi: Was ist denn daran jetzt überraschend und/oder unklar? Du versuchst den ``/``-Operator auf zwei Zeichenketten anzuwenden. Was sollte denn da heraus kommen und warum? Beispiel:
Code: Alles auswählen
In [1]: "a text" / "another text"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-63a7b50d883a> in <module>
----> 1 "a text" / "another text"
TypeError: unsupported operand type(s) for /: 'str' and 'str'
Was hätte denn da anderes als die Ausnahme als Ergebnis kommen sollen und warum?
Re: Spezielle Daten verschieben
Verfasst: Montag 5. April 2021, 07:50
von Bebbi
Habe den Code jetzt wie folgt angepasst.
Code: Alles auswählen
def main():
for name, customer_number in FILTERS:
destination = DESTINATION_PATH / name
for sourcefile in SOURCE_PATH.glob(f"*{customer_number}*.docx"):
sourcefile.rename("C:/Users/Startklar/Desktop/Empfangsordner" and name)
if __name__ == "__main__":
main()
Komischerweise hat es beim ersten Versuch halbwegs funktioniert. Eine Datei wurde in den Ordner "Sven" verschoben, aber auch gleich in Sven umbenannt. Das soll er aber nicht machen, der Dateiname darf nicht veraendert werden. Die andere Datei, welche in den Ordner Gerald hätte müssen ist verschwunden.... Beim zweiten Versuch kommt wieder eine Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Users\Startklar\Desktop\Move_II.py", line 20, in <module>
main()
File "C:\Users\Startklar\Desktop\Move_II.py", line 17, in main
sourcefile.rename("C:/Users/Startklar/Desktop/Empfangsordner" and name)
File "C:\Users\Startklar\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1358, in rename
self._accessor.rename(self, target)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'C:\\Users\\Startklar\\Desktop\\Ausgangsordner\\Sdi233004087109aiDIKD.docx' -> 'Sven'
>>>
Es gibt wohl Sachen die werde ich nie begreifen...
Re: Spezielle Daten verschieben
Verfasst: Montag 5. April 2021, 10:48
von __blackjack__
@Bebbi: Jetzt fängst Du an Syntax zu raten. Was soll denn das ``and``? Der Rechner versteht keine natürliche Sprache und macht dann was er denkt was Du gemeint haben könntest. Das hat alles eine feste Bedeutung und ``"C:/Users/Startklar/Desktop/Empfangsordner" and name`` ist immer das gleiche wie einfach nur ``name`` denn `name` ist immer ”wahr” weil das nie die leere Zeichenkette ist, womit ``and`` immer den zweiten Operanden als Ergebnis hat.
Re: Spezielle Daten verschieben
Verfasst: Montag 5. April 2021, 12:22
von Bebbi
Sorry aber ich stehe total auf dem Schlauch und beginne, wie Du schreibst an der Synthax zu wursteln. Du hast mir zuvor mitgeteilt, dass der gesamte Pfad in den Code muss. Dies habe ich gemacht:
Code: Alles auswählen
def main():
for name, customer_number in FILTERS:
destination = DESTINATION_PATH / name
for sourcefile in SOURCE_PATH.glob(f"*{customer_number}*.docx"):
sourcefile.rename("C:/Users/Startklar/Desktop/Empfangsordner/")
Mit diesem Code kommt mir aber der Fehler, dass die Datei bereits existiert. Das stimmt aber nicht, da im Empfangsordner keine solche Datei liegt sondern nur im Ausgangsordner. Ich verstehe nicht, weshalb diese Meldung kommt und ich verstehe nicht wie ich dem System mitteilen soll, dass der Name nicht geändert sondern lediglich in den erwähnten Ordner unter erwähntem Pfad verschoben werden soll.
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Users\Startklar\Desktop\Move_II.py", line 20, in <module>
main()
File "C:\Users\Startklar\Desktop\Move_II.py", line 17, in main
sourcefile.rename("C:/Users/Startklar/Desktop/Empfangsordner/")
File "C:\Users\Startklar\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1358, in rename
self._accessor.rename(self, target)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'C:\\Users\\Startklar\\Desktop\\Ausgangsordner\\jaösdfi10408710adsjfia5.docx' -> 'C:/Users/Startklar/Desktop/Empfangsordner/'
>>>
Ich drehe mich im Kreis, weiss aber wirlich nicht, was ich noch ausprobieren soll. Der Fehler muss doch bei diesem sourcefile.rename() liegen.....
Re: Spezielle Daten verschieben
Verfasst: Montag 5. April 2021, 16:22
von __blackjack__
@Bebbi: Doch das stimmt denn sonst würdest Du die Fehlermeldung nicht bekommen. Die ”Datei” »C:/Users/Startklar/Desktop/Empfangsordner« existiert bereits. Du versuchst da eine Datei zu einem existierenden Verzeichnisnamen umzubennenen. Das was Du da angibst/angeben musst ist der *volle Name* nach dem umbenennen. Und die Datei soll am Ende nicht im Verzeichnis »C:/Users/Startklar/Desktop« liegen und »Empfangsordner« heissen. Genau das sagst Du da aber. Und das geht nicht weil es im Verzeichnis »C:/Users/Startklar/Desktop« bereits eine ”Datei” mit dem Namen »Empfangsordner« gibt. Das ist das Verzeichnis was dort existiert und deshalb kommt die Ausnahme.
Da die Datei wahrscheinlich nicht umbenannt werden soll, müsste mindestens der alte Dateiname da noch mal auftauchen, plus wohl noch ein kundenspezifischer Teilpfad, denn sonst landet das vom Eingangsordner einfach auf der gleichen Ebene im Empfangsordner. Und ``/`` als Operator funktioniert nicht auf Zeichenketten sondern auf `Path`-Objekten. Und Du hast da doch sogar so etwas was schon fast fertig ist, aber nicht verwendet wird. Da fehlt halt noch etwas weil das ja auch ein *Verzeichnisname* ist und kein *Dateiname* den es noch nicht gibt.
Re: Spezielle Daten verschieben
Verfasst: Montag 5. April 2021, 19:47
von Bebbi
Danke _blackjack_ aber ich gebs jetzt auf.
Ich weiss was Du meinst, aber wie das umzusetzen ist kann ich nicht nachvollziehen. Ich habe den Überblick verloren und bin nur noch am raten. Sorry für die Zeitverschwendung.
Re: Spezielle Daten verschieben
Verfasst: Dienstag 6. April 2021, 07:08
von Sirius3
Du hast einen `sourcefilename` und ein `destination` Verzeichnis. Das einzige, was Du tun mußt, ist den Dateinamen an destination anzuhängen, und den Namen bekommst Du, über das `name`-Attribut von `sourcefilename.
Also
Code: Alles auswählen
sourcefilename.rename(destination / sourcefilename.name)
Re: Spezielle Daten verschieben
Verfasst: Dienstag 6. April 2021, 19:46
von Bebbi
Danke Sirius3, ich rege mich auf, dass ich nicht auf solche Lösungen komme. Das Ganze ist mir einfach noch zu fremd....