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

frente:Python: ¿diferencia entre os.access y os.path.exists?

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

entiendo que os.access es un poco más flexible ya que se puede comprobar si los atributos de RWE, así como la existencia camino, pero ¿hay alguna diferencia sutil que me falta aquí entre estas dos implementaciones?

+3

Si los documentos son creíbles, es aún más sutil que lo que dicen las respuestas. El modo 'os.F_OK' es específicamente para probar la existencia, no los permisos; mientras que para 'os.path.exists()': "En algunas plataformas, esta función puede devolver False si no se concede permiso para ejecutar os.stat() en el archivo solicitado, incluso si la ruta existe físicamente." Las [páginas de manual de FreeBSD] (http://www.freebsd.org/cgi/man.cgi?query=access&sektion=2) dicen que 'access' es más barato que 'stat' para probar la existencia. –

Respuesta

13

Mejor solo captar la excepción en lugar de tratar de evitarla. Hay una serie de razones trillón que makedirs puede fallar

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 

Para responder a su pregunta, os.access puede probar permiso para leer o escribir el archivo (como el usuario conectado). os.path.exists simplemente le dice si hay algo allí o no. Espero que la mayoría de la gente use os.path.exists para probar la existencia de un archivo, ya que es más fácil de recordar.

4

os.access prueba si el usuario actual puede acceder a la ruta os.path.exists comprueba si la ruta existe. os.access podría devolver False incluso si la ruta existe.