Datei Name anhand von WindosPath

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Huhngut
User
Beiträge: 4
Registriert: Donnerstag 26. September 2019, 14:55

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13239
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()`.
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.
Huhngut
User
Beiträge: 4
Registriert: Donnerstag 26. September 2019, 14:55

__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
Zuletzt geändert von Huhngut am Donnerstag 26. September 2019, 16:39, insgesamt 3-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 17825
Registriert: Sonntag 21. Oktober 2012, 17:20

Was meinst Du mit "ich habe einen Pfad"? Anhängen mußt Du gar nichts, sondern einfach nur copy statt copyfile benutzen.
Antworten