โซลูชันที่นำเสนอมีความน่าสนใจและมีข้อมูลอ้างอิงที่ดี แต่ก็น่าพอใจเพียงบางส่วน คุณสามารถเพิ่มตัวคั่นด้วยตนเองได้เมื่อคุณมีกรณีเฉพาะเดียวหรือคุณทราบรูปแบบของสตริงอินพุต แต่อาจมีบางกรณีที่คุณต้องการทำแบบเป็นโปรแกรมในอินพุตทั่วไป
จากการทดลองเล็กน้อยฉันเชื่อว่าเกณฑ์คือจะไม่มีการเพิ่มตัวคั่นเส้นทางหากส่วนแรกเป็นอักษรชื่อไดรฟ์ซึ่งหมายถึงอักษรตัวเดียวตามด้วยเครื่องหมายจุดคู่ไม่ว่าจะตรงกับหน่วยจริงก็ตาม
ตัวอย่างเช่น:
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
มันอาจจะได้รับการปรับปรุงให้แข็งแกร่งยิ่งขึ้นสำหรับช่องว่างต่อท้ายและฉันได้ทดสอบกับ windows เท่านั้น แต่ฉันหวังว่ามันจะให้ความคิด ดูOs.path ด้วย: คุณอธิบายพฤติกรรมนี้ได้ไหม สำหรับรายละเอียดที่น่าสนใจเกี่ยวกับระบบอื่น ๆ จากนั้น windows