bestimmte dateien löschen

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
Hook
User
Beiträge: 3
Registriert: Donnerstag 10. Januar 2008, 16:44
Kontaktdaten:

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("../../")
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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.
Hook
User
Beiträge: 3
Registriert: Donnerstag 10. Januar 2008, 16:44
Kontaktdaten:

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hook
User
Beiträge: 3
Registriert: Donnerstag 10. Januar 2008, 16:44
Kontaktdaten:

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
Antworten