Negasi dengan Python


162

Saya mencoba membuat direktori jika jalurnya tidak ada, tetapi! (tidak) operator tidak berfungsi. Saya tidak yakin bagaimana meniadakan di Python ... Apa cara yang benar untuk melakukan ini?

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

19
Omong-omong, mengapa tidak menggunakan Python os.mkdir()?
Neil

1
Saya tidak mengetahui fungsi os.mkdir (), meskipun saya pikir ada sesuatu seperti itu.
David Mulder

Jawaban:


229

Operator negasi dalam Python adalah not. Karena itu ganti saja !dengan Andanot .

Sebagai contoh Anda, lakukan ini:

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

Untuk contoh spesifik Anda (seperti yang dikatakan Neil dalam komentar), Anda tidak harus menggunakan subprocessmodul, Anda cukup menggunakanos.mkdir() untuk mendapatkan hasil yang Anda butuhkan, dengan pengecualian tambahan yang menangani kebaikan.

Contoh:

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 lebih memilih kata kunci bahasa Inggris daripada tanda baca. Gunakan not x, yaitu not os.path.exists(...). Hal yang sama berlaku untuk &&dan ||yang anddan ordengan Python.



1

Menggabungkan input dari orang lain (gunakan tidak, tidak ada paren, gunakan os.mkdir) Anda akan mendapatkan ...

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

1
Kode Anda (dan OP) adalah kecelakaan yang menunggu untuk terjadi - dua contoh string literal gondrong yang mungkin harus identik. Dan tolong jangan balas bahwa itu hanya contoh - ini adalah contoh buruk bagi pemula.
John Machin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.