提案されたソリューションは興味深いものであり、優れたリファレンスを提供しますが、それらは部分的にのみ満足しています。特定のケースが1つある場合、または入力文字列の形式がわかっている場合は、手動でセパレータを追加してもかまいませんが、一般的な入力に対してプログラムでそれを行いたい場合があります。
少し実験してみると、最初のセグメントがドライブ文字の場合、パス区切り文字は追加されない、つまり、実際の単位に対応しているかどうかに関係なく、コロンの後に続く単一の文字が追加されないことが基準になると思います。
例えば:
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も参照してください:この動作を説明できますか?ウィンドウ以外のシステムの興味深い詳細については。