Seite 1 von 1

Frage zu Verzeichnisstruktur erstellen mit os

Verfasst: Freitag 11. Februar 2011, 11:53
von Barcellona
Hallo zusammen,

ich habe mir eine Funktion geschrieben, um Text in eine .txt-Datei zu schreiben.
Zur Prüfung des Verzeichnisstrukturbaumes und der eventuellen Erstellung von
notwendigen Verzeichnisse habe ich folgenden Code geschrieben:

Code: Alles auswählen

def write_text_to_txt(self, output_file):
        try: # if all necessary directories exist
          f=open(output_file, 'w')
        except IOError: # if directory error, create path
            path=""  
            directory=re.split(r"/",output_file) #split path in folders
            for i in range(len(directory)-1): # 0 to len(directory)-1
                try: #create each part of the path, one by one
                    os.mkdir("{path}{directory}".format(path=path,directory=directory[i]))
                    path+=directory[i]
                    path+="/"
                except OSError:
                    path+=directory[i]
                    path+="/"

        f=open(output_file, 'w')
        f.write(text)
        f.close
Funktioniert sowohl unter Windows als auch unter Linux ohne Probleme.

Gibt es an dem Code Kritikpunkte?
Oder ist er zu umständlich?

Re: Frage zu Verzeichnisstruktur erstellen mit os

Verfasst: Freitag 11. Februar 2011, 12:04
von /me
Barcellona hat geschrieben:Gibt es an dem Code Kritikpunkte?
Oder ist er zu umständlich?
Magst du os.makedirs() nicht?

Re: Frage zu Verzeichnisstruktur erstellen mit os

Verfasst: Freitag 11. Februar 2011, 12:05
von BlackJack
@Barcellona: Ja da gibt es Kritikpunkte. Ich weiss gar nicht wo ich da anfangen soll. Eine Datei die geöffnet aber nicht wieder geschlossen wird, hart kodierte '/' und Zeichenkettenoperationen statt plattformunabhängige Funktionen aus `os.path`, unnötige Laufvariable für Indexzugriffe, erweitern von Zeichenketten mit ``+=`` in einer Schleife. Am besten wegwerfen und neu schreiben. Mit `os.path`-Funktionen und `os.makedirs()` statt das selber nochmal zu erfinden.

Re: Frage zu Verzeichnisstruktur erstellen mit os

Verfasst: Freitag 11. Februar 2011, 12:14
von b.esser-wisser
Außerdem heißt IOError nicht automatisch, dass es den Pfad nicht gibt (oder?).
Dann bliebe so etwas:

Code: Alles auswählen

def dump_text(text, fname):
    while True:
        try:
            with open(fname, "w") as dump_file:
                dump_file.write(text)
        except IOError as exc: # new syntax (>= python2.6)
        # old syntax: "except IOError, exc:"
            if exc.errno == errno.ENOENT: # file/path does not exist
                os.makedirs(os.path.dirname(fname)) # create missing directories
            else:
                raise # Don't handle e.g. permission issues here
        else:
            break
Python kennt kein "do ... while", aber ein "try..except...else", deshalb die 'Endlos'-Schleife

ps.:
@BLackJack: Zu deiner .sig fällt mir immer nur " 'Up Scotty' is the last place I want to be beamed" ein ;)

Re: Frage zu Verzeichnisstruktur erstellen mit os

Verfasst: Freitag 11. Februar 2011, 12:57
von BlackJack
@b.esser-wisser: Ich hätte es etwas ineffizienter, aber dafür wohl auch unkomplizierter ausgedrückt und immer erst versucht den Pfad anzulegen (ungetestet):

Code: Alles auswählen

def dump_text(text, filename):
    try:
        os.makedirs(os.path.dirname(filename))
    except IOError, error:
        # 
        # It is no error here if the path already exists.
        # Every other reason must be re raised.
        # 
        if error.errno != errno.EEXIST:
            raise

    with open(filename, 'w') as out_file:
        out_file.write(text)
LOL! 'Up Scotty' ist auch gut. :-D

Re: Frage zu Verzeichnisstruktur erstellen mit os

Verfasst: Freitag 11. Februar 2011, 13:43
von b.esser-wisser
@BlackJack: Ja, kürzer ist da vielleicht nicht schlecht.
(Praktisch würde ich das gar nicht machen: entweder hat 'mein' Programm die Kontrolle über die Struktur, dann werden alle Ordner explizit angelegt, oder der Benutzer hat die Ordner selbst zu erstellen)

Re: Frage zu Verzeichnisstruktur erstellen mit os

Verfasst: Freitag 11. Februar 2011, 15:08
von Barcellona
Vielen Dank für die Hinweise, sieht jetzt gut aus :D