Python-无论OS /路径格式如何,都从路径中提取文件名

无论使用哪种操作系统或路径格式,我都可以使用哪个Python库从路径提取文件名?

例如,我希望所有这些路径可以返回我c

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

回答:

使用os.path.splitos.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文件名中很少使用反斜杠,但是在编写代码时请记住这一点,以免造成意外的安全漏洞。

以上是 Python-无论OS /路径格式如何,都从路径中提取文件名 的全部内容, 来源链接: utcz.com/qa/431142.html

回到顶部