Önerilen çözümler ilginçtir ve iyi bir referans sunar, ancak sadece kısmen tatmin edicidir. Tek bir özel durumunuz olduğunda veya giriş dizesinin formatını biliyorsanız, ayırıcıyı manuel olarak eklemekte sorun yoktur, ancak bunu genel girişlerde programlı olarak yapmak istediğiniz durumlar olabilir.
Biraz deney yaparak, birinci segment bir sürücü harfiyse, yani tek bir harf ve ardından iki nokta üst üste, gerçek bir birime karşılık gelse bile, yol sınırlayıcının eklenmemesi kriterine inanıyorum.
Örneğin:
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
Kriterleri test etmenin ve bir yol düzeltmesi uygulamanın uygun bir yolu os.path.splitdrive
, ilk döndürülen öğeyi test değeriyle karşılaştırmak olabilir t+os.path.sep if os.path.splitdrive(t)[0]==t else t
.
Ölçek:
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
Muhtemelen takip eden boşluklar için daha sağlam olacak şekilde geliştirilebilir ve bunu sadece pencerelerde test ettim, ancak umarım bir fikir verir. Ayrıca bkz. Os.path: bu davranışı açıklayabilir misiniz? pencereler dışındaki sistemlerle ilgili ilginç ayrıntılar için.