Negazione in Python


162

Sto cercando di creare una directory se il percorso non esiste, ma il! (non) l'operatore non funziona. Non sono sicuro di come negare in Python ... Qual è il modo corretto di farlo?

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

19
A proposito, perché non usare Python os.mkdir()?
Neil,

1
Non ero a conoscenza della funzione os.mkdir (), anche se ho pensato che ci fosse qualcosa del genere.
David Mulder,

Risposte:


229

L'operatore di negazione in Python è not. Pertanto, basta sostituire il tuo !con not.

Per il tuo esempio, fai come segue:

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

Per il tuo esempio specifico (come ha detto Neil nei commenti), non devi usare il subprocessmodulo, puoi semplicemente usare os.mkdir()per ottenere il risultato di cui hai bisogno, con l'eccezione di gestire la bontà.

Esempio:

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.

30

Python preferisce le parole chiave inglesi alla punteggiatura. Usa not x, ad es not os.path.exists(...). La stessa cosa vale per &&e ||quali sono ande orin Python.



1

Combinando l'input di tutti gli altri (usa no, no parent, usa os.mkdir) otterrai ...

specialpathforjohn = "/usr/share/sounds/blues"
if not os.path.exists(specialpathforjohn):
    os.mkdir(specialpathforjohn)

1
Il tuo codice (e i PO) è un incidente in attesa di accadere - due casi di una stringa letterale longish che presumibilmente dovrebbe essere identica. E per favore non ribattere che è solo un esempio: è un BAD esempio per i neofiti.
John Machin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.