Negación en Python

162

Estoy tratando de crear un directorio si la ruta no existe, pero el! (no) el operador no funciona. No estoy seguro de cómo negar en Python ... ¿Cuál es la forma correcta de hacer esto?

if (!os.path.exists("/usr/share/sounds/blues")):
        proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
        proc.wait()
David Mulder
fuente
19
Por cierto, ¿por qué no usar Python os.mkdir()?
Neil
1
No tenía conocimiento de la función os.mkdir (), aunque supuse que había algo así.
David Mulder

Respuestas:

229

El operador de negación en Python es not. Por lo tanto, simplemente reemplace su !con not.

Para su ejemplo, haga esto:

if not os.path.exists("/usr/share/sounds/blues") :
    proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
    proc.wait()

Para su ejemplo específico (como dijo Neil en los comentarios), no tiene que usar el subprocessmódulo, simplemente puede usarlo os.mkdir()para obtener el resultado que necesita, con la bondad de manejo de excepciones adicional.

Ejemplo:

blues_sounds_path = "/usr/share/sounds/blues"
if not os.path.exists(blues_sounds_path):
    try:
        os.mkdir(blues_sounds_path)
    except OSError:
        # Handle the case where the directory could not be created.
Karl Nicoll
fuente
30

Python prefiere las palabras clave en inglés a la puntuación. Uso not x, es decir not os.path.exists(...). Lo mismo ocurre con &&y ||cuáles son andy oren Python.

Cat Plus Plus
fuente
12

intente en su lugar:

if not os.path.exists(pathName):
    do this
mshell_lauren
fuente
1

Combinando la entrada de todos los demás (use not, no parens, use os.mkdir) obtendría ...

specialpathforjohn = "/usr/share/sounds/blues"
if not os.path.exists(specialpathforjohn):
    os.mkdir(specialpathforjohn)
chmullig
fuente
1
Su código (y los OP) es un accidente que espera suceder, dos instancias de una cadena literal más larga que presumiblemente debería ser idéntica. Y por favor no respondas que es solo un ejemplo, es un MAL ejemplo para los novatos.
John Machin