[Erledigt] Probleme beim Löschen von Dateien

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
supersonic72
User
Beiträge: 17
Registriert: Freitag 15. September 2006, 15:45

Donnerstag 12. Oktober 2006, 10:31

Hallo alle zusammen.

Hoffe, jemand von euch kann mir weiterhelfen.

Ich habe ein Programm geschrieben, dass unter anderem ausgewertete Daten in eine Excel- oder Text-Datei schreibt. Nun will ich nach der Eingabe des Dateinamens überprüfen, ob dieser erlaubt ist (d.h. ohne ?, etc.). Dies versuche ich nun durch try: und except: zu machen. Dazu öffne ich einfach eine Datei mit diesem Namen. Das funktioniert auch wunderbar. Jedoch will ich danach diese Probe-Datei wieder löschen und es funktioniert einfach nicht. Wenn ich die Befehle nach dem ablauf des Programms per Hand eingebe gibt es gar kein Problem und es lässt sich alles löschen. Ideen?
Hier der Code:

Code: Alles auswählen

    excel_filename = raw_input("Geben Sie einen Dateinamen ein:")
    try:
        workbook_mean = open(excel_filename+".txt","a")
        workbook_mean.close()
    except:
        print "Bitte ueberpruefen Sie den von Ihnen verwendeten Dateinamen zum Abspeichern der Schaetzer. Er muss die ueblichen Richtlinien erfuellen."
        print "Die Schaetzer werden unter Standard_..._.xls/.txt ausgegeben"
        excel_filename= "Standard"

    try:
        os.remove(excel_filename+".txt")
    except:
        print "Hat nicht geklappt."
Habe es auch schon mit einem sleep() vorher probiert, falls der Rechner die Datei nicht schnell genug schließen kann.

Habe es eben ausprobiert und den Fehler gefunden: Es reicht bei os wohl nicht nur zu sagen

Code: Alles auswählen

from os import remove
Sondern er benötigt auch noch

Code: Alles auswählen

import os
Bei allen anderen Paketen reicht die erstere Variante. Kann mir das jemand erklären?

Habe herausgefunden, dass es davon abhängt, ob man den Befehl per os.remove("text.txt")

oder

remove("text.txt") aufruft. Da hätte ich auch früher drauf kommen können. Entschuldigt die Störung.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Donnerstag 12. Oktober 2006, 11:46

Das ist das Problem, wenn man einfach nur try: ... except: ... schreibt. Dann fängt Python nämlich ALLE Ausnahmen ab. Besser ist es except <spezifischer>Error: (oder so) zu schreiben, denn wenn dann etwas unvorhergesehenes passiert, gibt es immer noch einen Traceback, der Dich informieren kann, was schief gelaufen ist.

So eine Namespace-Verwirrung ist uns allen schon mal passiert, halb so wild. Aber ich würde nicht beide imports machen, sondern nur einen. Also entweder

Code: Alles auswählen

import os
# oder
from os import remove, ...
denn sonst sind weitere Verwirrungen bei großen Projekten vorprogrammiert. Im konkreten Fall, bei einem builtin-Modul mit so kurzem Namen würde ich die erste Version bevorzugen und überall os.remove(), bzw. os.andere-methode() schreiben.

Gruß,
Christian
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 12. Oktober 2006, 13:16

Hallo supersonic72, willkommen im Forum,

Du solltest dir mal die Dokumentation zum Importieren von Modulen durchlesen: [wiki]Import[/wiki].
My god, it's full of CARs! | Leonidasvoice vs Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Donnerstag 12. Oktober 2006, 13:49

Ups, mir ist gar nicht aufgefallen, daß Du neu hier bist.
Also: Erst einmal herzlich willkommen!

Christian

PS Leonidas Idee ist wahrscheinlich gar nicht so schlecht ...
Antworten