Négation en Python

162

J'essaye de créer un répertoire si le chemin n'existe pas, mais le! (not) ne fonctionne pas. Je ne sais pas comment annuler en Python ... Quelle est la bonne façon de faire cela?

if (!os.path.exists("/usr/share/sounds/blues")):
        proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
        proc.wait()
David Mulder
la source
19
Au fait, pourquoi ne pas utiliser Python os.mkdir()?
Neil
1
Je n'étais pas au courant de la fonction os.mkdir (), bien que je pensais qu'il y avait quelque chose comme ça.
David Mulder

Réponses:

229

L'opérateur de négation en Python est not. Par conséquent, remplacez simplement votre !par not.

Pour votre exemple, procédez comme suit:

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

Pour votre exemple spécifique (comme Neil l'a dit dans les commentaires), vous n'avez pas besoin d'utiliser le subprocessmodule, vous pouvez simplement l'utiliser os.mkdir()pour obtenir le résultat dont vous avez besoin, avec une qualité de gestion supplémentaire.

Exemple:

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
la source
30

Python préfère les mots-clés anglais à la ponctuation. Utilisez not x, c'est à dire not os.path.exists(...). La même chose vaut pour &&et ||qui sont andet oren Python.

Cat Plus Plus
la source
12

essayez plutôt:

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

En combinant les entrées de tout le monde (n'utilisez pas, pas de parenthèses, utilisez os.mkdir), vous obtiendrez ...

specialpathforjohn = "/usr/share/sounds/blues"
if not os.path.exists(specialpathforjohn):
    os.mkdir(specialpathforjohn)
chmullig
la source
1
Votre code (et les OP) est un accident en attente de se produire - deux instances d'une chaîne littérale longue qui devrait vraisemblablement être identique. Et ne rétorquez pas que ce n'est qu'un exemple - c'est un mauvais exemple pour les débutants.
John Machin