Les solutions proposées sont intéressantes et offrent une bonne référence, mais elles ne sont que partiellement satisfaisantes. Il est acceptable d'ajouter manuellement le séparateur lorsque vous avez un 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 de manière programmatique pour des entrées génériques.
Avec un peu d'expérience, je crois 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 lettre unique suivie de deux points, qu'elle corresponde ou non à 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 trajectoire peut être d'utiliser os.path.splitdrive
comparer le premier élément renvoyé à la valeur de test, de la manière suivante t+os.path.sep if os.path.splitdrive(t)[0]==t else t
.
Test :
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 l'ai testé seulement 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.