Les solutions proposées sont intéressantes et offrent une bonne référence, mais elles ne sont que partiellement satisfaisantes. Il est possible d'ajouter manuellement le séparateur lorsque vous avez un seul cas spécifique ou que vous connaissez le format de la chaîne d'entrée, mais il peut y avoir des cas où vous souhaitez le faire par programme sur des entrées génériques.
Avec un peu d'expérimentation, je pense que le critère est que le délimiteur de chemin n'est pas ajouté si le premier segment est une lettre de lecteur, c'est-à-dire une seule lettre suivie de deux points, peu importe si cela correspond à une unité réelle.
Par exemple:
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
Un moyen pratique de tester les critères et d'appliquer une correction de chemin peut être d'utiliser la os.path.splitdrive
comparaison du premier élément renvoyé à la valeur de test, comme t+os.path.sep if os.path.splitdrive(t)[0]==t else t
.
Tester:
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
il peut probablement être amélioré pour être plus robuste pour les espaces de fin, et je ne l'ai testé que sur windows, mais j'espère que cela donne une idée. Voir aussi Os.path: pouvez-vous expliquer ce comportement? pour des détails intéressants sur les systèmes autres que Windows.