1

在 Windows 中,os.path.basename('D:\\abc\def.txt')返回abc\def.txt,而os.path.basename('/abc/def.txt')返回def.txt

第一个不应该也返回def.txt吗?

4

1 回答 1

2

您的文件名中有转义码,而不是\目录分隔符。您必须通过使用文件名来简化问题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 接受任何一种)。

于 2015-08-25T11:04:20.470 回答