Hallo Python Community,
Ich bin hier neu und weiß noch nicht ganz wie das hier abläuft also seit mir nicht allzu böse wenn ich mich ausersehen nicht an eine Regel des Forums halte.
Ich habe einen Ordner und eine Datei.
Diese Datei soll ich den Ordner kopiert werden (copyfile(cmd[1], user_dir)
jetzt muss ich ja irgendwie an den Namen der zu kopierenden Datei kommen, um ihn hinter user_dir, was ein Ordnerpfad ist, zu schreiben so das die datei richtig kopiert wird
Wie löse ich das am besten in Python
Ps: Ich bin Python Anfänger aber kein Programmieranfänger
Datei Name anhand von WindosPath
Warum musst du den Namen der Datei an user_dir anhaengen? Alle Kopieroperationen die ich kenne machen das schon automatisch. Entweder gibst du als Ziel ein Verzeichnis an, dann wird die Datei mit gleichem basename angelegt wie an der Quelle, oder du gibst einen vollen Namen an, dann wird sie dahin kopiert.
basename ist dann auch das Stichwort, mit os.path.basename bekommst du den. Oder mit pathlib.Path(pfad).name. Warum da nicht auch basename - keine Ahnung.
Doch wie gesagt, ist nicht noetig.
basename ist dann auch das Stichwort, mit os.path.basename bekommst du den. Oder mit pathlib.Path(pfad).name. Warum da nicht auch basename - keine Ahnung.
Doch wie gesagt, ist nicht noetig.
- __blackjack__
- User
- Beiträge: 13237
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@__deets__: `basename` und `dirname` bei `os` wahrscheinlich wegen der gleichnamigen C-Funktionen. Und bei `name` und `parent` bei `pathlib` wahrscheinlich weil man sich gedacht hat es macht wenig Sinn an irgendwelchen uralten C-Funktionsnamen zu hängen, bei denen die Autoren darauf achten mussten mangels Namensräumen so etwas wie `name` oder `filename` nicht zu ”verbrauchen”, weil Programmierer diese beiden Namen vielleicht für eigene Werte verwenden wollen.
Edit: Bei `shutil.copyfile()` muss man tatsächlich den kompletten Dateinamen als Ziel angeben. Da stellt sich dann die Frage warum es diese Funktion sein muss, und nicht `shutil.copy()`.
Edit: Bei `shutil.copyfile()` muss man tatsächlich den kompletten Dateinamen als Ziel angeben. Da stellt sich dann die Frage warum es diese Funktion sein muss, und nicht `shutil.copy()`.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Ich nutze copyfile von shutil__deets__ hat geschrieben: ↑Donnerstag 26. September 2019, 15:53 Warum musst du den Namen der Datei an user_dir anhaengen? Alle Kopieroperationen die ich kenne machen das schon automatisch. Entweder gibst du als Ziel ein Verzeichnis an, dann wird die Datei mit gleichem basename angelegt wie an der Quelle, oder du gibst einen vollen Namen an, dann wird sie dahin kopiert.
basename ist dann auch das Stichwort, mit os.path.basename bekommst du den. Oder mit pathlib.Path(pfad).name. Warum da nicht auch basename - keine Ahnung.
Doch wie gesagt, ist nicht noetig.
Ich könnte einfach einen / an das ende des verzeichnisses anhängen dann würde es gehem
allerdings habe ich einen Pfad statt einem String und kann da nichts so leicht anhängen bzw ich weiß gerade weder wie ich anhänge noch wie ich in string umwandle
copyfile(cmd[1],user_dir) #cmd[1] = pfad von datei zum kopieren +user_dir=ordnerpfad wo datei hin soll
Traceback (most recent call last):
File "C:\Users\felix\Desktop\Python\Biblio\Biblio.py", line 33, in <module>
login()
File "C:\Users\felix\Desktop\Python\Biblio\Biblio.py", line 31, in login
executeUserCommands(username_dir)
File "C:\Users\felix\Desktop\Python\Biblio\Biblio.py", line 15, in executeUserCommands
commands.executeCommand(username_dir,cmd)
File "C:\Users\felix\Desktop\Python\Biblio\commands.py", line 35, in executeCommand
copyfile(cmd[1],user_dir)
File "C:\Users\felix\AppData\Local\Programs\Python\Python37\lib\shutil.py", line 121, in copyfile
with open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\felix\\Desktop\\Python\\Biblio\\BiblioData\\Huhngut'
Wenn ich /test.txt mache geht der permission error weg
Danke os.path.basename(pfad) hat super funktioniert
Zuletzt geändert von Huhngut am Donnerstag 26. September 2019, 16:39, insgesamt 3-mal geändert.
Ich verstehe die Erklaerung nicht. Und was wiederum hast du an den vorgeschlagenen Loesungen wie man an den entsprechenden Namensbestandteil kommt nicht verstanden? String-Konkatenation und Pfad-Operationen im speziellen sind auch sehr sehr gut beschrieben in der offiziellen Dokumentation.