os.path.exists बनाम os.path.isdir के बीच पेशेवरों और विपक्ष


78

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

जवाबों:


131

os.path.existsTrueयदि उस नाम के साथ एक नियमित फ़ाइल है तो भी वापस आ जाएगी ।

os.path.isdirकेवल तभी वापस आएगा Trueयदि वह पथ मौजूद है और निर्देशिका है, या किसी निर्देशिका का प्रतीकात्मक लिंक है।


1
os.path.isdirमेरे लिए एक सिम्लिंक पर सच लौटा रहा है।
काज

मैं os.path.isdir('.ipynb_checkpoints')वापस लौट रहा हूँ
लिटिल बॉबी टेबल्स

पायथन में 2.7 os.path.isdir निर्देशिकाओं के प्रति सहानुभूति के लिए सही है और फ़ाइलों के लिए सहानुभूति के लिए गलत है (जैसा कि अपेक्षित है)। हालाँकि यह os.rmdir के साथ समस्याएँ पैदा कर सकता है क्योंकि यह एक सिम्लिंक पर विफल होगा, भले ही यह एक निर्देशिका के लिए सिम्लिंक हो।
हलासफ़र

6

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


2

os.path.isdir () जाँचता है कि क्या पथ मौजूद है और एक निर्देशिका है और मामले के लिए TRUE लौटाता है।

इसी तरह, os.path.isfile () चेक करता है कि क्या पथ मौजूद है और एक फाइल है और मामले के लिए TRUE लौटाता है।

और, os.path.exists () यह जांचता है कि क्या पथ मौजूद है और परवाह नहीं करता है यदि पथ किसी फ़ाइल या निर्देशिका में जाता है और किसी भी स्थिति में TRUE लौटाता है।


0

ज्यादातर समय, यह एक ही है।

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

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


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

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

0

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

os.path.isdir (पथ) बदले में केवल तभी वापस लौटेगा जब पथ किसी निर्देशिका की ओर इंगित करता है


1
यह वास्तव में ओपी के सवाल का जवाब नहीं देता है, जो दो आज्ञाओं के बीच अंतर पूछ रहा है। आपने केवल एक विस्तृत विवरण दिया है।
तिकड़ी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.