यदि आप वहां नहीं हैं तो आप निर्देशिका बनाना चाहते हैं।
स्रोत , अगर यह अभी भी एसओ पर है।
================================================== ===================
पायथन, 3.5 पर, उपयोग करें pathlib.Path.mkdir
:
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
पायथन के पुराने संस्करणों के लिए, मुझे अच्छे गुणों के साथ दो उत्तर दिखाई देते हैं, प्रत्येक में एक छोटा दोष है, इसलिए मैं इस पर अपना ध्यान दूंगा:
कोशिश करो os.path.exists
, और os.makedirs
निर्माण के लिए विचार करें ।
import os
if not os.path.exists(directory):
os.makedirs(directory)
जैसा कि टिप्पणियों और अन्य जगहों पर उल्लेख किया गया है, एक दौड़ की स्थिति है - यदि निर्देशिका कॉल os.path.exists
और os.makedirs
कॉल के बीच बनाई गई है , तो os.makedirs
एक के साथ विफल हो जाएगी OSError
। दुर्भाग्य से, कंबल-कैचिंग OSError
और जारी रखना मूर्खतापूर्ण नहीं है, क्योंकि यह अन्य कारकों, जैसे अपर्याप्त अनुमति, पूर्ण डिस्क, आदि के कारण निर्देशिका बनाने में विफलता को अनदेखा करेगा।
एक विकल्प यह होगा OSError
कि एम्बेडेड त्रुटि कोड की जांच की जाए और ( पायथन के OSError से जानकारी प्राप्त करने का कोई क्रॉस-प्लेटफ़ॉर्म तरीका हो ):
import os, errno
try:
os.makedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise
वैकल्पिक रूप से, एक दूसरा हो सकता है os.path.exists
, लेकिन मान लीजिए कि दूसरे ने पहले चेक के बाद निर्देशिका बनाई, फिर दूसरे से पहले इसे हटा दिया - हमें अभी भी बेवकूफ बनाया जा सकता है।
आवेदन के आधार पर, समवर्ती संचालन का खतरा फ़ाइल अनुमतियों जैसे अन्य कारकों द्वारा उत्पन्न खतरे से कम या अधिक हो सकता है। कार्यान्वयन को चुनने से पहले डेवलपर को विशेष रूप से विकसित किए जा रहे एप्लिकेशन और उसके अपेक्षित वातावरण के बारे में अधिक जानना होगा।
पायथन के आधुनिक संस्करण इस कोड में काफी सुधार करते हैं, दोनों FileExistsError
(3.3 + में) उजागर करके ...
try:
os.makedirs("path/to/directory")
except FileExistsError:
# directory already exists
pass
... और अनुमति देकर किसी कीवर्ड को किसी तर्क os.makedirs
कहा जाता हैexist_ok
(3.2+ में)।
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.
os.stat
इसके बजाय प्रदर्शन करना चाह सकते हैं , यह देखने के लिए कि क्या निर्देशिका दोनों मौजूद है और उसी क्षण एक निर्देशिका है।