Orada yoksa dizini oluşturmak da isteyebilirsiniz.
Kaynak , eğer hala SO'da ise.
================================================== ===================
Python ≥ 3.5'te pathlib.Path.mkdir
şunları kullanın :
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
Python'un daha eski sürümleri için, her biri küçük bir kusuru olan iyi niteliklere sahip iki cevap görüyorum, bu yüzden onu ele alacağım:
Deneyin os.path.exists
ve os.makedirs
yaratmayı düşünün .
import os
if not os.path.exists(directory):
os.makedirs(directory)
Yorumların ve başka yerlerde belirtildiği gibi, bir yarış durumu var - dizin arasında oluşturulursa os.path.exists
ve os.makedirs
çağrılar, os.makedirs
bir başarısız olur OSError
. Ne yazık ki, battaniye yakalama OSError
ve devam etme, yetersiz izinler, tam disk vb.Gibi diğer faktörler nedeniyle dizin oluşturma hatasını göz ardı edeceğinden kusursuz değildir.
Bir seçenek OSError
, gömülü hata kodunu yakalamak ve incelemek olacaktır (bkz . Python'un OSError'undan bilgi almanın platformlar arası bir yolu var mı? ):
import os, errno
try:
os.makedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise
Alternatif olarak, bir saniye olabilir os.path.exists
, ancak ilk kontrolden sonra başka bir dizin oluşturduğunu, sonra ikinci kontrolden önce kaldırdığını varsayalım - yine de kandırabiliriz.
Uygulamaya bağlı olarak, eşzamanlı işlem tehlikesi, dosya izinleri gibi diğer faktörlerin oluşturduğu tehlikeden daha fazla veya daha az olabilir. Bir uygulama seçmeden önce geliştiricinin geliştirilmekte olan belirli uygulama ve beklenen ortamı hakkında daha fazla bilgi sahibi olması gerekir.
Python'un modern sürümleri bu kodu biraz açığa çıkarır, hem de FileExistsError
(3.3 + 'da) ...
try:
os.makedirs("path/to/directory")
except FileExistsError:
# directory already exists
pass
... ve bir anahtar kelime bağımsız değişkeninin os.makedirs
çağrılmasınaexist_ok
izin vererek (3.2+).
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.
os.stat
yerine, dizinin hem var olup olmadığını hem de aynı anda bir dizin olup olmadığını görmek isteyebilirsiniz.