Dateiname automatisch ändern

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ungetestet:

Code: Alles auswählen

import os

def new_file(name, ext=""):
    num = ""
    while True:
        try:
            return os.fdopen(os.open(name + num + ext, os.O_CREAT + os.O_EXCL), "w")
        except:
            num = " %d" % (int(num) + 1) if num else " 1"
Mit der low-level-Funktion `os.open` zusammen mit den angegebenen Flags kann ich sicherstellen, dass ich eine Datei nur dann anlegen kann, wenn sie noch nicht existiert. Das Betriebssystem garantiert, dass dies eine atomare Operation ist. Somit kann ich sicher sein, dass nicht parallel ein anderer Prozess, der ebenfalls versucht, einen Dateinamen zu finden, den Vorgang stört. Mein Exception-Handler ist zu simpel. Kann die Datei z.B. nicht angelegt werden, weil das Verzeichnis nicht beschreibbar ist, habe ich eine Endlosschleife. Das zu fixen überlasse ich dem Leser.

Stefan
Antworten