HOWTO · Python

如何在 Python 中从路径获取文件名

本教程将演示在 Python 中从文件路径提取文件名的不同方法,包括 os.path.split()、os.path.basename()、ntpath.basename() 和 pathlib.Path.name。

本页内容

在编程中,我们经常需要从给定的文件路径中提取文件名。设想这样一个场景:我们有一个文件路径,例如 C:\Documents\Project\file.txt,需要从中只提取文件名,即 file.txt。这是文件管理、数据分析和 Web 开发中的日常任务,Python 提供了几种完成它的方法。

本教程介绍在 Python 中从路径获取文件名的四种方法:os.path.split()、os.path.basename()、ntpath.basename() 和 pathlib.Path.name。它们的主要区别在于除了文件名之外还能提供什么,以及如何处理为与代码运行环境不同的操作系统编写的路径。

使用 os.path.split() 函数在 Python 中从路径获取文件名

os.path.split() 函数将文件路径拆分为目录和文件名两部分,这样你就可以只取文件名部分——如果你还需要目录,也可以把两部分都保留下来。

语法:

import os

directory, filename = os.path.split(path)

参数:os.path.split() 函数接受单个参数。

  • path:该参数表示要从中提取文件名的文件路径。它可以是包含文件绝对路径或相对路径的字符串。

返回值:该函数返回一个包含两个元素的元组。

  • directory:该变量保存路径的目录部分,不包括文件名。

  • filename:该变量包含从路径中提取的文件名。

下面的代码片段演示了如何使用 os.path.split() 函数在 Python 中从路径获取文件名。

import os

directory, filename = os.path.split("MyFolder/MySubFolder/MyFile.txt")
print(directory)
print(filename)

输出:

MyFolder/MySubFolder
MyFile.txt

变量 directory 保存着 MyFolder/MySubFolder,即文件路径的目录部分;变量 filename 保存着 MyFile.txt,即提取出的文件名。当你两个部分都需要时使用这个方法;如果只需要文件名,下一个方法更短。

使用 os.path.basename() 函数在 Python 中从路径获取文件名

os.path.basename() 函数返回路径的最后一个组成部分,通常就是文件名。它是 os.path 模块的一部分,其分隔符规则遵循代码运行所在的操作系统。

语法:

import os

filename = os.path.basename(path)

参数:os.path.basename() 函数接受单个参数。

  • path:该参数表示要从中提取文件名的文件路径。它可以是包含文件绝对路径或相对路径的字符串。

返回值:该函数返回一个字符串,表示从给定路径中提取的文件名。

os.path.basename() 和 os.path.split() 都能从路径中提取文件名,但 os.path.basename() 只关注文件名部分并将其作为字符串返回,因此当你不需要目录部分时,它是更直接的选择。

import os

filename = os.path.basename("MyFolder/MySubFolder/MyFile.txt")
print(filename)

输出:

MyFile.txt

结果即文件名 MyFile.txt 被赋给变量 filename 并打印出来。

使用 ntpath 库在 Python 中从路径获取文件名

Python 的 ntpath 模块实现了针对 Windows 路径的路径操作,无论你的代码实际运行在什么系统上。当你必须在 Linux 或 macOS 机器上处理 Windows 风格的路径时,这一点很重要:在这类系统上,os.path.basename() 不把反斜杠当作分隔符,因此 os.path.basename("MyFolder\\MySubFolder\\MyFile.txt") 会返回整个字符串,而 ntpath.basename() 返回文件名。

语法:

import ntpath

filename = ntpath.basename(path)

参数:ntpath.basename() 函数接受单个参数。

  • path:该参数表示要从中提取文件名的文件路径。它可以是包含文件绝对路径或相对路径的字符串。

返回值:该函数返回一个字符串,表示从给定路径中提取的文件名。

下面的代码片段演示了如何使用 ntpath.basename() 函数在 Python 中从 Windows 路径获取文件名。

import ntpath

filename = ntpath.basename("MyFolder\\MySubFolder\\MyFile.txt")
print(filename)

输出:

MyFile.txt

当你处理的路径是 Windows 路径、但代码可能在任何系统上运行时,使用 ntpath;在 Windows 机器上,os.path 本来就遵循同样的规则,两者表现一致。

使用 pathlib 模块在 Python 中从路径获取文件名

pathlib 模块为处理文件路径提供了面向对象的方法。它的 Path 类封装了与路径相关的操作,文件名可以直接通过 Path 对象的 .name 属性获得。

from pathlib import Path

filename = Path("MyFolder/MySubFolder/MyFile.txt").name
print(filename)

输出:

MyFile.txt

除了 .name,同一个对象还能给出父目录(.parent)、扩展名(.suffix)和不带扩展名的文件名(.stem),因此当你需要的不只是文件名时,pathlib 是方便的选择。

结论

我们探讨了在 Python 中从文件路径提取文件名的 4 种不同方法:os.path.split()、os.path.basename()、ntpath.basename() 和 pathlib.Path.name。每种方法都有其优缺点,适用于不同的场景。

os.path.split() 方法可以将路径拆分为目录和文件名两部分。这种细粒度让你能更好地控制路径,但仅访问文件名需要额外的代码。不过,它可以在不同的操作系统上工作,用途广泛。

另一方面,os.path.basename() 提供了更简单的方法,直接从路径中提取文件名。它兼容各种平台,提供了直接明了的解决方案。但是,它只以字符串形式返回文件名。

对于 Windows 特定的路径,ntpath.basename() 旨在在任何操作系统上处理这些路径。它无需额外的代码即可直接提取文件名。但是,它仅限于 Windows 路径,缺乏跨平台兼容性。

最后,pathlib.Path.name 为处理路径提供了面向对象的方法。它允许进一步的路径操作,并与其他 pathlib 功能很好地集成。但是,它为简单的文件名提取引入了一些复杂性,并且需要导入 pathlib 模块。