मैं पाइथन सीख रहा हूं और मैंने अपनी स्क्रिप्ट में से एक के साथ कुछ अजीब देखा। ऐसा करने से एक छोटे से परीक्षण मैं इस समस्या की खोज की इस व्यवहार से उपजी:os.path.join तर्कों को दूर क्यों करता है?
>>> import os
>>> os.path.join('a','b')
'a/b'
>>> os.path.join('a','/b')
'/b'
documentation जाँच हो रही है, यह है, वास्तव में, समारोह के डिजाइन:
os.path। में शामिल होने (path1[, Path2[ ... ]])
एक या अधिक पथ घटकों समझदारी से शामिल हों। यदि कोई घटक एक पूर्ण पथ है, तो पिछले सभी घटकों (विंडोज़ पर, पिछले ड्राइव अक्षर सहित, यदि कोई था) को फेंक दिया जाता है, और जारी रहता है। ...
मेरा प्रश्न why my script failed नहीं है, बल्कि क्यों समारोह इस तरह से डिजाइन किया गया था। मेरा मतलब है, कम से कम यूनिक्स पर, a//b
सुरुचिपूर्ण नहीं होने पर पथ को नामित करने का एक स्वीकार्य तरीका है। इस तरह से डिजाइन क्यों डिजाइन किया गया था? क्या यह बताने का कोई तरीका है कि os.path.isabs()
के साथ प्रत्येक पथ स्ट्रिंग का परीक्षण करने के लिए एक या अधिक पथ तत्वों को छोड़ दिया गया है?
जिज्ञासा से बाहर, मैं भी इस मामले की जाँच की है, जहां एक पथ घटक एक os.sep
चरित्र में समाप्त होता है:
>>> os.path.join('a/','b')
'a/b'
अपेक्षा के अनुरूप काम करता है।
एक आसान, यद्यपि सुरुचिपूर्ण, इसके लिए जांच करने का तरीका 'filename.lstrip ('/')' – voithos
@voithos इसे 'filename.lstrip (os.sep)' बनाएं और यह अधिकांश प्रमुख प्लेटफ़ॉर्म पर पोर्टेबल है। – delnan
@ डेलनान: आपको विंडोज़ पर परीक्षण करना होगा, जहां यह 'os.sep +'/'' –