प्रस्तावित समाधान दिलचस्प हैं और एक अच्छा संदर्भ प्रदान करते हैं, हालांकि वे केवल आंशिक रूप से संतोषजनक हैं। जब आपके पास एक विशिष्ट मामला है या आप इनपुट स्ट्रिंग के प्रारूप को जानते हैं, तो मैन्युअल रूप से विभाजक को जोड़ना ठीक है, लेकिन ऐसे मामले हो सकते हैं जहां आप इसे जेनेरिक इनपुट पर प्रोग्रामेटिक रूप से करना चाहते हैं।
थोड़ा प्रयोग करने के साथ, मेरा मानना है कि मानदंड यह है कि पथ परिसीमन को नहीं जोड़ा गया है यदि पहला खंड एक ड्राइव अक्षर है, जिसका अर्थ है कि एक एकल अक्षर एक कोलन द्वारा पीछा किया जाता है, भले ही यह एक वास्तविक इकाई से मेल खाता हो।
उदाहरण के लिए:
import os
testval = ['c:','c:\\','d:','j:','jr:','data:']
for t in testval:
print ('test value: ',t,', join to "folder"',os.path.join(t,'folder'))
test value: c: , join to "folder" c:folder
test value: c:\ , join to "folder" c:\folder
test value: d: , join to "folder" d:folder
test value: j: , join to "folder" j:folder
test value: jr: , join to "folder" jr:\folder
test value: data: , join to "folder" data:\folder
मानदंडों के लिए परीक्षण करने और पथ सुधार लागू करने का एक सुविधाजनक तरीका os.path.splitdrive
पहले लौटे तत्व की तुलना परीक्षण मूल्य की तरह उपयोग करना हो सकता है t+os.path.sep if os.path.splitdrive(t)[0]==t else t
।
परीक्षा:
for t in testval:
corrected = t+os.path.sep if os.path.splitdrive(t)[0]==t else t
print ('original: %s\tcorrected: %s'%(t,corrected),' join corrected->',os.path.join(corrected,'folder'))
original: c: corrected: c:\ join corrected-> c:\folder
original: c:\ corrected: c:\ join corrected-> c:\folder
original: d: corrected: d:\ join corrected-> d:\folder
original: j: corrected: j:\ join corrected-> j:\folder
original: jr: corrected: jr: join corrected-> jr:\folder
original: data: corrected: data: join corrected-> data:\folder
यह शायद अनुगामी रिक्त स्थान के लिए और अधिक मजबूत होने के लिए सुधार किया जा सकता है, और मैंने इसे केवल खिड़कियों पर परीक्षण किया है, लेकिन मुझे उम्मीद है कि यह एक विचार देता है। Os.path भी देखें : क्या आप इस व्यवहार की व्याख्या कर सकते हैं? सिस्टम पर दिलचस्प विवरण के लिए फिर विंडोज़।