2013-02-25 26 views
34

मैं यह देखने के लिए जांच रहा हूं कि कोई निर्देशिका मौजूद है या नहीं, लेकिन मैंने देखा है कि मैं path.isdir के बजाय path.exists का उपयोग कर रहा हूं। दोनों काम ठीक है, लेकिन मैं उत्सुक हूं कि अस्तित्व के बजाय isdir का उपयोग करने के फायदे क्या हैं।पायथन: os.path.exists बनाम os.path.isdir

उत्तर

67

os.path.exists उस नाम के साथ नियमित फ़ाइल होने पर भी True वापस कर देगा।

os.path.isdir केवल True लौटाएगा यदि वह पथ मौजूद है और एक निर्देशिका है।

+1

'os.path.isdir' के लिए पथ अंक एक सिमलिंक पर मेरे लिए सच लौटा रहा है। – Kaz

+0

मुझे 'os.path.isdir ('। Ipynb_checkpoints') मिल रहा है 'सच लौटा रहा है – josh

+0

@josh yes यह' .ipynb_checkpoints' * एक निर्देशिका है। –

4

जैसा कि यह लगता है जैसे: यदि पथ मौजूद है, लेकिन एक फ़ाइल है और निर्देशिका नहीं है, isdirFalse लौटाएगा। इस बीच, exists दोनों मामलों में True लौटाएगा।

0

अधिकांश समय, यह वही है।

लेकिन, पथ शारीरिक रूप से मौजूद हो सकता है जबकि path.exists() झूठा रिटर्न देता है। यह मामला है अगर os.stat() इस फ़ाइल के लिए झूठा रिटर्न देता है।

यदि पथ शारीरिक रूप से मौजूद है, तो path.isdir() हमेशा सत्य लौटाएगा। यह मंच पर निर्भर नहीं है।

+0

स्पष्ट नहीं है कि अंतिम अनुच्छेद का क्या अर्थ है। यदि कोई निर्देशिका दूरस्थ सर्वर पर भौतिक रूप से मौजूद है, लेकिन मेरे पास कोई नेटवर्क कनेक्शन नहीं है जहां मैं स्क्रिप्ट चला रहा हूं, तो निश्चित रूप से 'isdir()' यह नहीं जान सकता कि निर्देशिका मौजूद है या नहीं। – LarsH

+0

यदि आप यूएनसी पथ पर कोई निर्देशिका मौजूद हैं या नहीं, तो os.path.exists वास्तव में मौजूद होने पर भी झूठी वापसी कर सकता है (कनेक्शन के साथ भी), लेकिन os.path.isdir सही मान वापस कर देगा। सिमलर यूएनसी पथ मामले में एक फ़ाइल के लिए आपको उसी कारण से os.path.exists के बजाय os.path.isfile का भी उपयोग करना चाहिए। – miigotu

0

os.path.exists (पथ) यदि पथ मौजूदा पथ को संदर्भित करता है तो सत्य वापस आता है। एक मौजूदा पथ नियमित फ़ाइलें (http://en.wikipedia.org/wiki/Unix_file_types#Regular_file) हो सकता है, लेकिन विशेष फ़ाइलें (उदा। निर्देशिका)। तो संक्षेप में यह फ़ंक्शन सत्य देता है यदि फ़ाइल प्रदान किया गया पथ फ़ाइल सिस्टम में मौजूद है (टूटा सिम्लिंक जैसे कुछ अपवादों के बावजूद)।

os.path.isdir (पथ) बदले में ही सच्चा वापस आ जाएगी जब एक निर्देशिका

+0

यह वास्तव में ओपी के प्रश्न का उत्तर नहीं देता है, जो दो आदेशों के बीच अंतर मांग रहा है। आपके पास केवल एक विस्तृत विवरण है। – esqew