As soluções propostas são interessantes e oferecem uma boa referência, porém são apenas parcialmente satisfatórias. É normal adicionar manualmente o separador quando você tem um único caso específico ou sabe o formato da string de entrada, mas pode haver casos em que você deseja fazer isso programaticamente em entradas genéricas.
Com um pouco de experimentação, acredito que o critério é que o delimitador de caminho não seja adicionado se o primeiro segmento for uma letra de unidade, ou seja, uma única letra seguida de dois pontos, não importa se corresponde a uma unidade real.
Por exemplo:
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
Uma maneira conveniente de testar os critérios e aplicar uma correção de caminho pode ser usar a os.path.splitdrive
comparação do primeiro elemento retornado com o valor de teste, como t+os.path.sep if os.path.splitdrive(t)[0]==t else t
.
Teste:
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
provavelmente pode ser melhorado para ser mais robusto para espaços à direita, e eu testei apenas no Windows, mas espero que dê uma ideia. Veja também Os.path: você pode explicar esse comportamento? para detalhes interessantes sobre sistemas diferentes do Windows.