Seite 1 von 1

Datei Name anhand von WindosPath

Verfasst: Donnerstag 26. September 2019, 15:05
von Huhngut
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

Re: Datei Name anhand von WindosPath

Verfasst: Donnerstag 26. September 2019, 15:53
von __deets__
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.

Re: Datei Name anhand von WindosPath

Verfasst: Donnerstag 26. September 2019, 16:02
von __blackjack__
@__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()`.

Re: Datei Name anhand von WindosPath

Verfasst: Donnerstag 26. September 2019, 16:32
von Huhngut
__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 nutze copyfile von shutil
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

Re: Datei Name anhand von WindosPath

Verfasst: Donnerstag 26. September 2019, 16:35
von __deets__
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.

Re: Datei Name anhand von WindosPath

Verfasst: Donnerstag 26. September 2019, 16:36
von Sirius3
Was meinst Du mit "ich habe einen Pfad"? Anhängen mußt Du gar nichts, sondern einfach nur copy statt copyfile benutzen.