Python, bir dizin var olmadığını kontrol edin ve gerekirse oluşturun
Eğer bir dosyaya yazılacak dizin olup olmadığını kontrol etmek için, ve değilse, dizin Python kullanarak oluşturmak en zarif yolu nedir? Denedim:
filename = "/my/directory/filename.txt"
dir = os.path.dirname(filename)
try:
os.stat(dir)
except:
os.mkdir(dir)
f = file(filename)
Nasıl olduysa, os.path.exists
(teşekkürler kanja, Blair ve Douglas) özledim. Bu şimdi ben ne var:
def ensure_dir(f):
d = os.path.dirname(f)
if not os.path.exists(d):
os.makedirs(d)
Orada bir bayrak"", bu otomatik olarak gerçekleşmesini sağlar? açıktır
CEVAP
İyi özellikleri olan iki cevap, küçük bir kusur ile her görünce, onu almak benim vereceğim:
os.path.exists
, denemek ve oluşturmak için os.makedirs
düşünün.
if not os.path.exists(directory):
os.makedirs(directory)
Belirtildiği gibi açıklamaları ve başka bir yerde, bir yarış durumu - eğer dizin oluşturulur arasındaki os.path.exists
os.makedirs
arama os.makedirs
ile başarısız olur OSError
. Ne yazık ki, battaniye alıcı OSError
ve devam eden dizinin diğer faktörler, izinler, tam disk, vb yetersiz gibi nedeniyle oluşturmak için bir hata göz ardı edilir gibi kusursuz değil.
Bir seçenek olurdu tuzak OSError
ve incelemek dahili hata kodu, eğer bir biliyordu neyin ne (benim OS, 13 gibi olduğunu belirtmek için izin reddedildi, 17 dosya var değil net o kadar uzaktan bile taşınabilir, ama araştırdı Is there a cross-platform way of getting information from Python’s OSError). Alternatif olarak, 15* *ama başka bir ilk kontrolden sonra dizin oluşturulmuş, ikincisi önce kaldırıldı sonra sanırım bir saniye olabilir - hala kandırılmış olabiliriz.
Uygulamaya bağlı olarak, eşzamanlı operasyonlar tehlikesi tehlike dosya izinleri gibi diğer faktörler tarafından ortaya atılan ve daha fazla veya daha az olabilir. Geliştirici belirli uygulama geliştirilmekte ve beklenen çevresi hakkında daha fazla şey öğrenmek için bir uygulama seçmeden önce olurdu.
Nasıl bir dize bir sayı (yüzen) olup o...
Python: eğer bir nesne ya da bir dizi ...
Eğer yolu dosya veya dizin olup olmadı...
Nasıl birden fazla anahtarı bir dict i...
Nasıl eğer dizin bir tablo alanı üzeri...