2012-07-26 13 views
16

निम्न कोड मुझे एक निर्देशिका बनाने की अनुमति देता है अगर यह पहले से मौजूद नहीं है।किसी फ़ोल्डर को ओवरराइट करने के लिए कैसे करें यदि यह निर्माता के साथ बनाते समय पहले से मौजूद है?

dir = 'path_to_my_folder' 
if not os.path.exists(dir): 
    os.makedirs(dir) 

फ़ोल्डर को उस फ़ोल्डर में टेक्स्ट फ़ाइलों को लिखने के लिए प्रोग्राम द्वारा उपयोग किया जाएगा। लेकिन अगली बार मेरा प्रोग्राम खुलता है, लेकिन मैं एक ब्रांड नए, खाली फ़ोल्डर से शुरू करना चाहता हूं।

क्या फ़ोल्डर पहले से लिखने का एक तरीका है (और एक ही नाम के साथ एक नया बनाओ) यदि यह पहले से मौजूद है?

+1

यह ध्यान देने योग्य है, हालांकि यह आपके लिए महत्वपूर्ण नहीं हो सकता है, जवाब में से सब यहाँ दौड़ की स्थिति है (और जब तक यह वास्तव में नहीं है कि पूरी तरह से उन्हें खत्म करने के लिए संभव है, आप ईएएफपी का उपयोग करके बेहतर कर सकते हैं)। – Julian

उत्तर

7
import shutil 

dir = 'path_to_my_folder' 
if not os.path.exists(dir): 
    os.makedirs(dir) 
else: 
    shutil.rmtree(dir)   #removes all the subdirectories! 
    os.makedirs(dir) 

कैसे इस बारे में? shutil की Python लाइब्रेरी पर एक नज़र डालें!

+0

यह भी काम करता है .. लेकिन क्या यह एक काफी आम मॉड्यूल है? इस कोड को कई मशीनों पर लागू करने की आवश्यकता है .. –

+0

@ शंकर कुमार हां। 'पायथन' 'पायथन 2.4 'के बाद से' पायथन 'के पुस्तकालयों में निर्मित' शिलिल 'का हिस्सा है। मैं व्यक्तिगत रूप से सोचता हूं कि 'शिल' 'ओएस 'से बेहतर है क्योंकि इसमें कुछ सरलीकरण आते हैं। – cybertextron

0

बस कहें

dir = 'path_to_my_folder' 
if not os.path.exists(dir): # if the directory does not exist 
    os.makedirs(dir) # make the directory 
else: # the directory exists 
    #removes all files in a folder 
    for the_file in os.listdir(dir): 
     file_path = os.path.join(dir, the_file) 
     try: 
      if os.path.isfile(file_path): 
       os.unlink(file_path) # unlink (delete) the file 
     except Exception, e: 
      print e 
+0

धन्यवाद, यह बहुत अच्छा काम करता है! क्या आप इसके पीछे तर्क समझाते हैं? मैं एक नौसिखिया हूं इसलिए मैं जितना कर सकता हूं उतना सीखने की कोशिश कर रहा हूं! –

+0

हालांकि यह असफल होगा, अगर आपके पास डीआईआर में उपनिवेशियां हैं जिन्हें आप हटाने की कोशिश कर रहे हैं। फिर आप इसे ठीक करने के लिए 'os.walk' को कॉल करना चाहते हैं। 'Shutil.rmtree' का उपयोग करना एक आसान समाधान होगा। – inspectorG4dget

+0

क्या यह दौड़ की स्थिति के प्रति प्रतिरोधी होगा? –

0

EAFP (see about it here) संस्करण

import errno 
import os 
from shutil import rmtree 
from uuid import uuid4 

path = 'path_to_my_folder' 
temp_path = os.path.dirname(path)+'/'+str(uuid4()) 
try: 
    os.renames(path, temp_path) 
except OSError as exception: 
    if exception.errno != errno.ENOENT: 
     raise 
else: 
    rmtree(temp_path) 
os.mkdir(path) 
+0

स्टैक ओवरफ़्लो में आपका स्वागत है! यह आपके पहले उत्तर के रूप में समीक्षा के लिए आया था। एक स्वीकृत उत्तर के साथ पुराने प्रश्न का उत्तर देते समय, यह मौजूदा समाधानों में जो जोड़ रहे हैं, उसे हाइलाइट करना उचित है। इस मामले में - क्या आप समझा सकते हैं कि आप क्यों मानते हैं कि यह कोड दौड़ की स्थिति से प्रतिरक्षा है? उदाहरण के लिए - क्या होता है यदि glob.iglob() पर कॉल के बाद निर्देशिका में फ़ाइल लिखा जाता है - क्या आप एक कारण बता सकते हैं कि आपका समाधान दौड़ की स्थिति के अधीन क्यों है? इसके अलावा: आप यह समझाने के बारे में सोच सकते हैं कि ईएएफपी क्या है। * एनबी मैंने मूल * –

+0

@JRichardSnape हां में त्रुटि के कारण संपादित टिप्पणी दोबारा पोस्ट की है, आप सही हैं, यह कोड दौड़ की स्थिति से प्रतिरक्षा नहीं है। मेरी राय में नया संस्करण, इस आवश्यकता को पूरा करता है –

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

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