SORU
7 Kasım 2008, Cuma


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
7 Kasım 2008, Cuma


İ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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jesiel santos

    jesiel santo

    15 Ocak 2009
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011
  • Xcode programming tutorials

    Xcode progra

    17 EYLÜL 2006