当前位置:嗨网首页>书籍在线阅读

10-取得文件路径的各部分

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.1.8 取得文件路径的各部分

给定一个 Path 对象,可以利用 Path 对象的几个属性,将文件路径的不同部分提取为字符串。这对于在现有文件路径的基础上构造新文件路径很有用。这些属性如图9-4所示。

64.png

图9-4 Windows操作系统(上部)和macOS / Linux操作系统(下部)文件路径的部分

文件路径的各个部分包括以下内容。

  • “锚点”(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所示。

65.png

图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() 字符串方法将返回一个列表,包含该路径的所有部分。