使用os.path.split或os.path.basename作为其他人建议不会在所有情况下都有效:如果您在Linux上运行脚本并尝试处理经典的Windows样式路径,它将失败。
Windows路径可以使用反斜杠或正斜杠作为路径分隔符。因此,ntpath模块(在Windows上运行时相当于os.path)将适用于所有平台上的所有(1)路径。import ntpath
ntpath.basename("a/b/c")
当然,如果文件以斜杠结尾,则基本名称将为空,因此请创建自己的函数来处理它:def path_leaf(path):
head, tail = ntpath.split(path)
return tail or ntpath.basename(head)
验证:>>> paths = ['a/b/c/', 'a/b/c', '\\a\\b\\c', '\\a\\b\\c\\', 'a\\b\\c', ... 'a/b/../../a/b/c/', 'a/b/../../a/b/c']>>> [path_leaf(path) for path in paths]['c', 'c', 'c', 'c', 'c', 'c', 'c']
(1)有一点需要注意:Linux文件名可能包含反斜杠。所以在linux上,r'a/b\c'总是指文件夹b\c中的a文件,而在Windows上,它总是引用c文件b夹子文件夹中的a文件。因此,当在路径中使用向前和向后斜杠时,您需要知道相关平台才能正确解释它。在实践中,通常可以安全地假设它是一个Windows路径,因为反斜杠在Linux文件名中很少使用,但在编码时请记住这一点,这样就不会产生意外的安全漏洞。