Seite 1 von 1

[Erledigt] Probleme beim Löschen von Dateien

Verfasst: Donnerstag 12. Oktober 2006, 10:31
von supersonic72
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.

Verfasst: Donnerstag 12. Oktober 2006, 11:46
von CM
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

Verfasst: Donnerstag 12. Oktober 2006, 13:16
von Leonidas
Hallo supersonic72, willkommen im Forum,

Du solltest dir mal die Dokumentation zum Importieren von Modulen durchlesen: [wiki]Import[/wiki].

Verfasst: Donnerstag 12. Oktober 2006, 13:49
von CM
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 ...