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()

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.

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.



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)

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.