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()
David Mulder
sumber
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.
Karl Nicoll
sumber
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.

Cat Plus Plus
sumber
12

coba saja:

if not os.path.exists(pathName):
    do this
mshell_lauren
sumber
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)
chmullig
sumber
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