在 Windows 中,os.path.basename('D:\\abc\def.txt')
返回abc\def.txt
,而os.path.basename('/abc/def.txt')
返回def.txt
。
第一个不应该也返回def.txt
吗?
您的文件名中有转义码,而不是\
目录分隔符。您必须通过使用文件名来简化问题def
,但是如果您实际使用简化的文件名进行测试,您会注意到斜杠会加倍:
>>> 'D:\\abc\def.txt'
'D:\\abc\\def.txt'
请注意,\d
字符串文字中的 变成了\\
值的 Python 表示中的转义反斜杠。那是因为没有有效的\d
转义序列。在 Windows 系统上,该os.path.basename()
调用对该路径按预期工作:
>>> import os.path
>>> os.path.basename('D:\\abc\\def.txt')
'def.txt'
但是,在您的情况下,您创建了一个转义序列,要么\n
,\r
要么\t
,因为您要么忘记加倍反斜杠,要么忘记使用原始字符串。您在文件名的那部分中没有\
字符,因此在该位置没有可拆分的内容。
使用r'...'
原始字符串来防止单个反斜杠形成转义序列,或者在所有位置使用双反斜杠,或者使用正斜杠(Windows 接受任何一种)。