10-取得文件路径的各部分
9.1.8 取得文件路径的各部分
给定一个 Path
对象,可以利用 Path
对象的几个属性,将文件路径的不同部分提取为字符串。这对于在现有文件路径的基础上构造新文件路径很有用。这些属性如图9-4所示。
文件路径的各个部分包括以下内容。
- “锚点”(anchor),它是文件系统的根文件夹。
- 在Windows操作系统上,“驱动器”(drive)是单个字母,通常表示物理硬盘驱动器或其他存储设备。
- “父文件夹”(parent),即包含该文件的文件夹。
- “文件名”(name),由“主干名”(stem)(或“基本名称”)和“后缀名”(suffix)(或“扩展名”)构成。
请注意,Windows操作系统中的 Path
对象具有 drive
属性,而macOS和Linux操作系统中的 Path
对象则没有。 drive
属性不包含第一个倒斜杠。
要从文件路径中提取每个属性,请在交互式环境中输入以下内容:
>>> p = Path('C:/Users/Al/spam.txt')
>>> p.anchor
'C:\\'
>>> p.parent # This is a Path object, not a string.
WindowsPath('C:/Users/Al')
>>> p.name
'spam.txt'
>>> p.stem
'spam'
>>> p.suffix
'.txt'
>>> p.drive
'C:'
这些属性求值为简单的字符串值,但 parent
除外,它求值为另一个 Path
对象。
parents
属性(与 parent
属性不同)求值为一组 Path
对象,代表祖先文件夹,具有整数索引:
>>> Path.cwd()
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python37')
>>> Path.cwd().parents[0]
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python')
>>> Path.cwd().parents[1]
WindowsPath('C:/Users/Al/AppData/Local/Programs')
>>> Path.cwd().parents[2]
WindowsPath('C:/Users/Al/AppData/Local')
>>> Path.cwd().parents[3]
WindowsPath('C:/Users/Al/AppData')
>>> Path.cwd().parents[4]
WindowsPath('C:/Users/Al')
>>> Path.cwd().parents[5]
WindowsPath('C:/Users')
>>> Path.cwd().parents[6]
WindowsPath('C:/')
较老的 os.path
模块也有类似的函数,用于取得写在一个字符串值中的路径的不同部分。调用 os.path.dirname(path)
将返回一个字符串,它包含 path
参数中最后一个斜杠之前的所有内容。调用 os.path.basename(path)
将返回一个字符串,它包含 path
参数中最后一个斜杠之后的所有内容。一个路径的目录名称和基本名称如图9-5所示。
例如,在交互式环境中输入以下代码:
>>> calcFilePath = 'C:\\Windows\\System32\\calc.exe'
>>> os.path.basename(calcFilePath)
'calc.exe'
>>> os.path.dirname(calcFilePath)
'C:\\Windows\\System32'
如果同时需要一个路径的目录名称和基本名称,就可以调用 os.path. split()
,获得这两个字符串的元组,像这样:
>>> calcFilePath = 'C:\\Windows\\System32\\calc.exe'
>>> os.path.split(calcFilePath)
('C:\\Windows\\System32', 'calc.exe')
请注意,可以调用 os.path.dirname()
和 os.path.basename()
,将它们的返回值放在一个元组中,从而得到同样的元组:
>>> (os.path.dirname(calcFilePath), os.path.basename(calcFilePath))
('C:\\Windows\\System32', 'calc.exe')
但如果需要两个值,调用 os.path.split()
是很好的快捷方式。
同时也请注意, os.path.split()
不会接收一个文件路径并返回每个文件夹的字符串的列表。如果需要这样,请使用 split()
字符串方法,并根据 os.sep
中的字符串进行分隔。(注意 sep
是在 os
中,不在 os.path
中。)针对运行程序的计算机, os.sep
变量被置为正确的目录分隔斜杠,在Windows操作系统上是 '\\'
,在macOS和Linux操作系统上是 '/'
。根据它进行分隔,将返回一系列单个文件夹的列表。
例如,在交互式环境中输入以下代码:
>>> calcFilePath.split(os.sep)
['C:', 'Windows', 'System32', 'calc.exe']
这将返回路径字符串的所有部分。
在macOS和Linux操作系统上,返回的列表头上有一个空字符串,像这样:
>>> '/usr/bin'.split(os.sep)
['', 'usr', 'bin']
split()
字符串方法将返回一个列表,包含该路径的所有部分。