提出的解决方案很有趣,并提供了很好的参考,但它们只是部分令人满意。当您有单个特定情况或您知道输入字符串的格式时,可以手动添加分隔符,但在某些情况下,您可能希望在通用输入上以编程方式执行此操作。
通过一些实验,我认为标准是如果第一段是驱动器号,则不添加路径分隔符,这意味着单个字母后跟冒号,无论它是否对应于实际单元。
例如:
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 以外系统的有趣详细信息。