2010-08-02 8 views
17
def CreateDirectory(pathName): 
    if not os.access(pathName, os.F_OK): 
     os.makedirs(pathName) 

gegen:Python - Unterschied zwischen os.access und os.path.exists?

def CreateDirectory(pathName): 
    if not os.path.exists(pathName): 
     os.makedirs(pathName) 

Ich verstehe, dass os.access etwas flexibler ist, da Sie für die RWE-Attribute sowie Pfad Existenz zu überprüfen, aber gibt es einige feine Unterschied ich hier fehlt bin zwischen diese beiden Implementierungen?

+3

Wenn die Dokumente zu glauben sind, ist es noch subtiler als was die Antworten sagen. Der Modus "os.F_OK" dient speziell zum Testen der Existenz, nicht der Berechtigungen; while for 'os.path.exists()': "Auf einigen Plattformen kann diese Funktion False zurückgeben, wenn die Berechtigung zum Ausführen von os.stat() in der angeforderten Datei nicht erteilt wird, selbst wenn der Pfad physisch existiert." Die [FreeBSD man pages] (http://www.freebsd.org/cgi/man.cgi?query=access§ion=2) sagen, dass 'access' billiger ist als' stat', um das Vorhandensein zu testen. –

Antwort

13

Besser, nur die Ausnahme zu fangen, anstatt zu versuchen, es zu verhindern. Es gibt eine Unmenge Gründe, die makedirs scheitern kann

def CreateDirectory(pathName): 
    try: 
     os.makedirs(pathName) 
    except OSError, e: 
     # could be that the directory already exists 
     # could be permission error 
     # could be file system is full 
     # look at e.errno to determine what went wrong 

Ihre Frage zu beantworten, os.access für die Erlaubnis, die Datei zu lesen oder schreiben testen kann (wie die angemeldeten Benutzer). os.path.exists sagt Ihnen einfach, ob da etwas ist oder nicht. Ich erwarte, dass die meisten Leute os.path.exists verwenden würden, um auf die Existenz einer Datei zu prüfen, da es einfacher ist, sich daran zu erinnern.

4

os.access testet, ob der aktuelle Benutzer auf den Pfad zugreifen kann. os.path.exists prüft, ob der Pfad existiert. os.access könnte False zurückgeben, selbst wenn der Pfad existiert.

Verwandte Themen