2012-09-20 17 views
147

संभव डुप्लिकेट:,फ़ाइल उत्पादन के साथ स्वचालित रूप से बनाने निर्देशिका

filename = "/foo/bar/baz.txt" 

with open(filename, "w") as f: 
    f.write("FOOBAR") 

यह एक IOError देता है के बाद से /foo/bar करता है:
mkdir -p functionality in python

मैं एक फ़ाइल बनाना चाहते कहो मौजूद नहीं।

स्वचालित रूप से उन निर्देशिकाओं को उत्पन्न करने के लिए सबसे महत्वपूर्ण तरीका क्या है? क्या मेरे लिए यह आवश्यक है कि प्रत्येक व्यक्ति (यानी,/foo, then/foo/bar) पर स्पष्ट रूप से os.path.exists और os.mkdir पर कॉल करें?

उत्तर

290

os.makedirs फ़ंक्शन यह करता है। निम्नलिखित का प्रयास करें:

import os 
import errno 

filename = "/foo/bar/baz.txt" 
if not os.path.exists(os.path.dirname(filename)): 
    try: 
     os.makedirs(os.path.dirname(filename)) 
    except OSError as exc: # Guard against race condition 
     if exc.errno != errno.EEXIST: 
      raise 

with open(filename, "w") as f: 
    f.write("FOOBAR") 

कारण जोड़ने के लिए try-except ब्लॉक मामले को संभालने के लिए जब निर्देशिका os.path.exists और os.makedirs कॉल के बीच बनाया गया था, ताकि दौड़ की स्थिति से हमारी रक्षा करने के लिए।

filename = "/foo/bar/baz.txt"¨ 
os.makedirs(os.path.dirname(filename), exist_ok=True) 
with open(filename, "w") as f: 
    f.write("FOOBAR") 
+0

बस अतीत 'os.mkdir' देखने के लिए और एक और समारोह का दस्तावेज़ पढ़ें :) – mgilson

+1

पड़ा:


अजगर 3.2+ में, वहाँ एक more elegant way कि ऊपर रेस स्थिति से बचा जाता है है यहां थोड़ा अलग दृष्टिकोण है: http://stackoverflow.com/a/14364249/1317713 विचार? – Leonid

+1

'os.makedirs' उपयोग [ईएएफपी] (https://docs.python.org/2/glossary.html#term-eafp) के बाद से inital 'if os.path.exists' की आवश्यकता नहीं है? –

संबंधित मुद्दे