Solusi yang diusulkan menarik dan menawarkan referensi yang baik, namun hanya sebagian yang memuaskan. Anda boleh menambahkan pemisah secara manual saat Anda memiliki kasus tertentu atau Anda mengetahui format string masukan, tetapi mungkin ada kasus di mana Anda ingin melakukannya secara terprogram pada masukan umum.
Dengan sedikit percobaan, saya yakin kriterianya adalah bahwa pembatas jalur tidak ditambahkan jika segmen pertama adalah huruf drive, yang berarti satu huruf diikuti oleh titik dua, tidak peduli apakah itu sesuai dengan unit nyata.
Sebagai contoh:
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
Cara mudah untuk menguji kriteria dan menerapkan koreksi jalur dapat menggunakan os.path.splitdrive
membandingkan elemen pertama yang dikembalikan ke nilai pengujian, seperti t+os.path.sep if os.path.splitdrive(t)[0]==t else t
.
Uji:
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
itu mungkin dapat ditingkatkan menjadi lebih kuat untuk ruang tambahan, dan saya telah mengujinya hanya di windows, tapi saya harap ini memberi gambaran. Lihat juga Os.path: dapatkah Anda menjelaskan perilaku ini? untuk detail menarik tentang sistem selain jendela.