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