09-处理绝对路径和相对路径
9.1.7 处理绝对路径和相对路径
pathlib
模块提供了一些方法,用于检查给定路径是否为绝对路径,以及返回相对路径的绝对路径。
调用一个 Path
对象的 is_absolute()
方法,如果它代表绝对路径,则返回 True
;如果代表相对路径,则返回 False
。例如,使用你自己的文件和文件夹(而不是这里列出的具体文件和文件夹),在交互式环境中输入以下内容:
>>> Path.cwd()
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python37')
>>> Path.cwd().is_absolute()
True
>>> Path('spam/bacon/eggs').is_absolute()
False
要从相对路径获取绝对路径,可以将 Path.cwd()/
放在相对 Path
对象的前面。毕竟,当我们说“相对路径”时,几乎总是指相对于当前工作目录的路径。在交互式环境中输入以下内容:
>>> Path('my/relative/path')
WindowsPath('my/relative/path')
>>> Path.cwd() / Path('my/relative/path')
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python37/my/relative/ path')
如果你的相对路径是相对于当前工作目录之外的其他路径,那么只需将 Path.cwd()
替换为那个其他路径就可以了。以下示例使用主目录而不是当前工作目录来获取绝对路径:
>>> Path('my/relative/path')
WindowsPath('my/relative/path')
>>> Path.home() / Path('my/relative/path')
WindowsPath('C:/Users/Al/my/relative/path')
os.path
模块提供了一些有用的函数,它们与绝对路径和相对路径有关。
- 调用
os.path.abspath(path)
将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法。 - 调用
os.path.isabs(path)
,如果参数是一个绝对路径,就返回True
;如果参数是一个相对路径,就返回False
。 - 调用
os.path.relpath(path, start)
将返回从开始路径到path
的相对路径的字符串。如果没有提供开始路径,就将当前工作目录作为开始路径。
在交互式环境中尝试使用以下函数:
>>> os.path.abspath('.')
'C:\\Users\\Al\\AppData\\Local\\Programs\\Python\\Python37'
>>> os.path.abspath('.\\Scripts')
'C:\\Users\\Al\\AppData\\Local\\Programs\\Python\\Python37\\Scripts'
>>> os.path.isabs('.')
False
>>> os.path.isabs(os.path.abspath('.'))
True
因为在调用 os.path.abspath()
时,当前目录是C:\Users\Al\AppData\Local\ Programs\Python\ Python37,所以“点”文件夹指的是绝对路径'C:\Users\Al\AppData\ Local\Programs\Python\ Python37'。
在交互式环境中,输入以下代码对 os.path.relpath()
进行调用:
>>> os.path.relpath('C:\\Windows', 'C:\\')
'Windows'
>>> os.path.relpath('C:\\Windows', 'C:\\spam\\eggs')
'..\\..\\Windows'
如果相对路径与该路径位于同一父文件夹中,但位于其他路径的子文件夹中,例如 'C:\\Windows'
和 'C:\\spam\eggs'
,就可以用“点点”表示法返回到父文件夹。