पायथन 3.5+:
import pathlib
pathlib.Path('/my/directory').mkdir(parents=True, exist_ok=True)
pathlib.Path.mkdir
जैसा कि ऊपर इस्तेमाल किया गया है, निर्देशिका को पुन: बनाता है और यदि निर्देशिका पहले से मौजूद है तो अपवाद नहीं बढ़ाता है। यदि आपको माता-पिता की आवश्यकता नहीं है या बनना चाहते हैं, तो छोड़ेंparents
तर्क को ।
पायथन 3.2+:
का उपयोग कर pathlib
:
यदि आप कर सकते हैं, तो वर्तमान में pathlib
नामांकित बैकपोर्ट स्थापित करें pathlib2
। नामांकित पुराने अप्रयुक्त बैकपोर्ट को स्थापित न करें pathlib
। इसके बाद, ऊपर दिए गए पायथन 3.5+ सेक्शन को देखें और उसी का उपयोग करें।
यदि पायथन 3.4 का उपयोग किया जाता है, भले ही यह साथ आता है pathlib
, लेकिन यह उपयोगी exist_ok
विकल्प को याद नहीं कर रहा है । बैकपोर्ट एक नए और बेहतर कार्यान्वयन की पेशकश करने का इरादा रखता है, mkdir
जिसमें यह लापता विकल्प शामिल है।
का उपयोग कर os
:
import os
os.makedirs(path, exist_ok=True)
os.makedirs
जैसा कि ऊपर इस्तेमाल किया गया है, निर्देशिका को पुन: बनाता है और यदि निर्देशिका पहले से मौजूद है तो अपवाद नहीं बढ़ाता है। exist_ok
डिफ़ॉल्ट मान के साथ, इसका केवल पाइथन 3.2+ का उपयोग करने पर वैकल्पिक तर्क हैFalse
। यह तर्क पायथन 2.x में 2.7 तक मौजूद नहीं है। जैसे, पायथन 2.7 के साथ मैनुअल अपवाद हैंडलिंग की कोई आवश्यकता नहीं है।
पायथन 2.7+:
का उपयोग कर pathlib
:
यदि आप कर सकते हैं, तो वर्तमान में pathlib
नामांकित बैकपोर्ट स्थापित करें pathlib2
। नामांकित पुराने अप्रयुक्त बैकपोर्ट को स्थापित न करें pathlib
। इसके बाद, ऊपर दिए गए पायथन 3.5+ सेक्शन को देखें और उसी का उपयोग करें।
का उपयोग कर os
:
import os
try:
os.makedirs(path)
except OSError:
if not os.path.isdir(path):
raise
जबकि एक भोला समाधान पहले उपयोग कर सकता os.path.isdir
है os.makedirs
, ऊपर दिए गए समाधान दो संचालन के क्रम को उलट देता है। ऐसा करने में, यह निर्देशिका बनाने में एक डुप्लिकेट किए गए प्रयास के साथ एक सामान्य दौड़ की स्थिति को रोकता है, और निर्देशिकाओं के साथ फ़ाइलों को भी वितरित करता है।
ध्यान दें कि अपवाद को कैप्चर करना और उपयोग errno
करना सीमित उपयोगिता का है OSError: [Errno 17] File exists
, क्योंकि , errno.EEXIST
फाइल और निर्देशिका दोनों के लिए उठाया जाता है। यह अधिक विश्वसनीय है कि निर्देशिका मौजूद है या नहीं।
वैकल्पिक:
mkpath
नेस्टेड निर्देशिका बनाता है, और कुछ भी नहीं है अगर निर्देशिका पहले से मौजूद है। यह पायथन 2 और 3 दोनों में काम करता है।
import distutils.dir_util
distutils.dir_util.mkpath(path)
प्रति बग 10948 , इस विकल्प की एक गंभीर सीमा यह है कि यह किसी दिए गए मार्ग के लिए केवल एक बार अजगर प्रक्रिया के अनुसार काम करता है। दूसरे शब्दों में, यदि आप एक निर्देशिका बनाने के लिए इसका उपयोग करते हैं, तो पायथन के अंदर या बाहर से निर्देशिका को हटा दें, फिर mkpath
उसी निर्देशिका को फिर से बनाने के लिए फिर से उपयोग करें, mkpath
बस चुपचाप अपनी अमान्य कैश्ड जानकारी का उपयोग पहले निर्देशिका बनाने के लिए करेंगे, और नहीं करेंगे वास्तव में फिर से निर्देशिका बनाते हैं। इसके विपरीत, os.makedirs
इस तरह के किसी भी कैश पर भरोसा नहीं करता है। यह सीमा कुछ अनुप्रयोगों के लिए ठीक हो सकती है।
निर्देशिका के मोड के संबंध में , कृपया दस्तावेज का संदर्भ लें यदि आप इसकी परवाह करते हैं।