तार संघनन से अधिक os.path.join का उपयोग क्यों करें?


85

मुझे लगता है कि मैं यहाँ बड़ी तस्वीर नहीं देख पा रहा हूँ; लेकिन मूल रूप से मुझे इस बात का कोई अंदाजा नहीं है कि आप os.path.joinसिर्फ सामान्य स्ट्रिंग के संयोजन के बजाय इसका उपयोग क्यों करेंगे ?

मैंने मुख्य रूप से VBScript का उपयोग किया है इसलिए मुझे इस फ़ंक्शन की बात समझ में नहीं आती है।


जवाबों:


85

पोर्टेबल

एक बार फ़ाइलपथ जोड़तोड़ लिखें और यह कई अलग-अलग प्लेटफार्मों पर काम करता है, मुफ्त में। परिसीमन वर्ण दूर है, जिससे आपका काम आसान हो जाता है।

होशियार

अब आपको यह चिंता करने की आवश्यकता नहीं है कि उस निर्देशिका पथ में पीछे चल रहा स्लैश था या नहींos.path.joinजरूरत पड़ने पर इसे जोड़ देगा।

स्पष्ट

उपयोग os.path.joinकरने से आपके कोड को पढ़ने वाले अन्य लोगों को यह स्पष्ट हो जाता है कि आप फ़ाइलपथ के साथ काम कर रहे हैं। लोग जल्दी से कोड के माध्यम से स्कैन कर सकते हैं और इसे आंतरिक रूप से एक फ़ाइलपथ की खोज कर सकते हैं। यदि आप इसे स्वयं बनाने का निर्णय लेते हैं, तो आप अपने कोड के साथ वास्तविक समस्याओं को खोजने से पाठक को अलग कर देंगे: "हम्म, कुछ स्ट्रिंग कॉन्सर्ट, एक प्रतिस्थापन। क्या यह एक फ़ाइलपथ या क्या है? गह! उसने इसका उपयोग क्यों नहीं किया os.path.join?" :)


3
धन्यवाद। स्मार्ट और क्लियर पार्ट्स बिल्कुल उसी तरह के तर्क हैं, जिन्हें मैं अपने लिए एक ही सवाल पूछते समय देख रहा था: पोर्टेबल पार्ट आसानी से विंडोज़ के बजाय "/" के साथ कॉन्टेक्ट करके प्राप्त किया जाता है, इसलिए यह एक तरह से म्यूट है।
लेओ जर्मोंड जूल

3
बिंदु 3 में योग्यता है, लेकिन 1 और 2 मूट हैं। / विंडोज पर काम करता है। क्या आप कभी ओएस का उपयोग कर रहे हैं जो इसका समर्थन नहीं करता है? और ओएस / एफएस द्वारा डबल ट्रेलिंग स्लैश आपके लिए सामान्यीकृत हैं। मैं यह नहीं कह रहा हूं कि आप इसका उपयोग नहीं करते हैं os.path.join, लेकिन यदि आप करते हैं, तो इसे सही कारणों के लिए करें। आस.पास.जॉइन के आसपास काफी माल-खेती होती है। जैसा कि वे कहते हैं, "एक मूर्खता, छोटे दिमागों की हॉजोब्लिन है।"
हरबन

5

विंडोज पर '\' और यूनिक्स (मैक ओएस एक्स सहित) '/' के साथ काम करेगा।

यहां पॉसिक्‍सपैथ के लिए सीधा कोड है

In [22]: os.path.join??
Type:       function
String Form:<function join at 0x107c28ed8>
File:       /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
Definition: os.path.join(a, *p)
Source:
def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded."""
    path = a
    for b in p:
        if b.startswith('/'):
            path = b
        elif path == '' or path.endswith('/'):
            path +=  b
        else:
            path += '/' + b
    return path

खिड़कियां नहीं हैं, लेकिन '\' के साथ भी ऐसा ही होना चाहिए


5
विचित्र रूप से पर्याप्त है, हालांकि, /CPython के साथ विंडोज पर काम करता है ...
एरिक ओ लेबिगॉट

1
यह। जब आप अपने लिए यह करने के लिए डिज़ाइन किया गया कोई फ़ंक्शन है, तो आप अपने आप को पथ विभाजक आदि की कोशिश क्यों करेंगे?
ब्लेयर

1
मैं टिप्पणियों को पढ़ता हूं और यह एक साथ रास्तों से जुड़ता है, मैं सिर्फ यह नहीं देख सकता कि मैं कभी इसका उपयोग क्यों करूंगा, माफी जैसे कि मैंने कहा कि मैं स्पष्ट रूप से बड़ी तस्वीर नहीं देख रहा हूं।
user1905410

@ user1905410 यह उस से अधिक करता है, जैसा कि फाइन डॉक्यूमेंटेशन कवर करता है।

@ user1905410 यह उस से अधिक करता है, जैसा कि फाइन डॉक्यूमेंटेशन कवर करता है।

0

यह ओएस-स्वतंत्र है। यदि आप C: \ के रूप में अपने रास्तों को हार्डकोड करते हैं, तो वे केवल विंडोज पर काम करेंगे। यदि आप उन्हें यूनिक्स मानक के साथ हार्डकोड करते हैं "/" तो वे केवल यूनिक्स पर काम करेंगे। os.path.join उस ऑपरेटिंग सिस्टम का पता लगाता है जो उसके नीचे चल रहा है और सही प्रतीक का उपयोग करके पथों से जुड़ता है।


7
If you hardcode them with the Unix standard "/" they will only work on Unix.यह गलत है। विंडोज़ और लाइनक्स / यूनिक्स / बीएसडी / डार्विन पर "/" ठीक काम करता है।
लेवो जर्मोंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.