Seite 1 von 1

bestimmte dateien löschen

Verfasst: Donnerstag 10. Januar 2008, 16:56
von Hook
habe mich soeben hier registriert und denke und hoffe einfach mal, dass man mir hier schnell weiterhelfen kann :wink:

gleich zum problem:
ich habe einen bot in python für ein voicetool geschrieben, das benutzern u.a. erlaubt, über einen bestimmten command eine datei zu erstellen in die sprachdaten geschrieben werden.
wie ist es nun zu realisieren, dass nur in einem bestimmten ordner diese dateien erstellt bzw. gelöscht werden dürfen? (man kann ja mit ../ einen ordner hoch springen)
reicht es, ../ auszufiltern, bzw. einfach keine slashes im dateinamen zu erlauben? oder ist es ratsam, einfach nur a-z, A-Z und 0-9 zu erlauben? (falls das zutrifft, wie ist das am geschicktesten zu realisieren?)


die dateien lasse ich momentan wie folgt erstellen:

Code: Alles auswählen

	os.chdir("sounds/user/")
	file = open(dateiname , "w")
	file.close()
	os.chdir("../../")

Re: bestimmte dateien löschen

Verfasst: Donnerstag 10. Januar 2008, 17:19
von gerold
Hallo Hook!

Willkommen im Python-Forum!

Du könntest den Dateinamen herausfiltern und einen vorgegebenen Ordner vorne anfügen. Damit hast du einen absoluten Pfad.

Z.b. so:

Code: Alles auswählen

>>> import os
>>> file_basename = os.path.basename("/gutshof/../servus/../hallo.bin")
>>> file_dirname = "/dirname"
>>> file_path = os.path.join(file_dirname, file_basename)
>>> file_path
'/dirname/hallo.bin'
>>>

Vielleicht habe ich dich aber auch total falsch verstanden. :roll:

mfg
Gerold
:-)

Verfasst: Donnerstag 10. Januar 2008, 17:22
von BlackJack
Falls das zu restriktiv ist, kann man sich mit `os.path.abspath()` auch den absoluten Pfad geben lassen und schauen ob der mit dem absoluten Pfad beginnt ab dem bzw. unter dem das Anlegen der Dateien erlaubt ist.

@Hook: `os.chdir()` würde ich nicht verwenden, sondern lieber wie gerold das gezeigt hat, den Pfad mit `os.path.join()` zusammen setzen.

Verfasst: Donnerstag 10. Januar 2008, 18:04
von Hook
danke für die antworten!

habe das nun ganz einfach folgendermaßen realisiert:

Code: Alles auswählen

    import os
    workingdir = os.getcwd()
    os.path.join(workingdir+"sounds/user/")
    file = open(os.path.basename(dateiname) , "w")
    file.close()
    os.path.join(workingdir)
ist diese methode eigentlich sicher? ich möchte diese nämlich auch auf das löschen von dateien anwenden.

Verfasst: Donnerstag 10. Januar 2008, 18:13
von gerold
Hook hat geschrieben:

Code: Alles auswählen

    import os
    workingdir = os.getcwd()
    os.path.join(workingdir+"sounds/user/")
    file = open(os.path.basename(dateiname) , "w")
    file.close()
    os.path.join(workingdir)
Hallo Hook!

``os.getcwd()`` gibt dir das aktuelle Arbeitsverzeichnis zurück. Das ist nicht immer der Ordner, in dem auch die Python-Datei liegt. Das ist der Ordner, von dem aus dein Programm aufgerufen wurde. Das wäre mich immer noch zu unsicher.

Vielleicht kannst du damit etwas anfangen: http://www.python-forum.de/post-64471.html#64471

``os.path.join`` verwendet man nicht so wie du es oben zeigst. Statt dem "+", sollte ein Beistrich hin. Schau einfach mal in die Hilfe, wie man mit os.path.join und Co. arbeitet: http://docs.python.org/lib/module-os.path.html

``file`` ist ein reservierter Name. Den solltest du nicht unbedingt überschreiben.

mfg
Gerold
:-)

Verfasst: Donnerstag 10. Januar 2008, 18:37
von Hook
so, nun ein neuer versuch:

Code: Alles auswählen

    import os
    workingdir = os.path.abspath(os.curdir)
    os.path.join(workingdir , "sounds/user/")
    datei = open(os.path.basename(dateiname) , "w")
    datei.close()
    os.path.join(workingdir)
wenn ich die dokumentation zu os.curdir richtig verstanden habe, gibt diese funktion mir also den ordner aus, in dem ich mich gerade befinde, in dem das script also momentan ausgeführt wird?

das problem ist nur, dass das verzeichnis nicht nach sounds/user/ gewechselt wird, wenn ich

Code: Alles auswählen

    os.path.join(workingdir , "sounds/user/")
ausführe...

Edit: ich war wohl zu blöd zu kapieren wie os.path.join() arbeitet :wink:
auf jeden fall funktioniert dieser code nun:

Code: Alles auswählen

    import os
    workingdir = os.path.abspath(os.curdir)
    directory = os.path.join(workingdir , "sounds/", "user/")
    datei = open(os.path.join(directory, os.path.basename(dateiname)) , "w")
    datei.close()
    os.path.join(workingdir)
danke nochmals für die hilfe :D