6.2.2 建立路径
要实例化一个新路径,可以提供一个字符串作为第一个参数。路径对象的字符串表示就是这个名值。要创建一个新路径来指示相对于已有路径的一个值,可以使用/操作符扩展这个路径。这个操作符的参数可以是一个字符串,也可以是另一个路径对象。
import pathlib
usr = pathlib.PurePosixPath('/usr')
print(usr)
usr_local = usr / 'local'
print(usr_local)
usr_share = usr / pathlib.PurePosixPath('share')
print(usr_share)
root = usr / '..'
print(root)
etc = root / '/etc/'
print(etc)
如示例输出中root的值所示,这个操作符会组合所提供的路径值,但是在包含父目录引用“…”时没有对结果进行规范化。不过,如果一个路径段以路径分隔符开头,那么与os.path.join()中一样,会把它解释为一个新的“根”引用。会从路径值中间删除额外的路径分隔符,如这里的etc实例所示。
运行结果:
具体路径类包括一个用于规范化路径resolve()方法,它会在文件系统中查找目录和符号链接,并生成一个名指示的绝对路径。
import pathlib
usr_local = pathlib.Path('/usr/local')
share = usr_local / '..' / 'share'
print(share.resolve())
这里相对路径被转换为绝对路径/usr/share。如果输入路径包含符号链接,那么它们也会展开,以使规范化的路径直接指示目标。
运行结果:
G:\usr\share
要想在路径段提前不可知时建立路径,可以使用joinpath(),并传入各个路径段作为一个单独的参数。
import pathlib
root = pathlib.PurePosixPath('/')
subdirs = ['usr','local']
usr_local = root.joinpath(*subdirs)
print(usr_local)
与/操作符一样,调用joinpath()会创建一个新实例。
运行结果:
/usr/local
给定一个现有的路径对象,可以很容易地建立一个与它稍有差别的新对象,如指示同一个目录中的另一个文件。可以使用with_name()创建一个新路径,将一个路径中的名部分替换为另一个不同的文件名。使用with_suffix()也可以创建一个新路径,将文件名的扩展名替换为一个不同的值。
import pathlib
ind = pathlib.PurePosixPath('source/pathlib/index.rst')
print(ind)
py = ind.with_name('pathlib_from_existing.py')
print(py)
pyc = py.with_suffix('.pyc')
print(pyc)
这两个方法都返回新对象,原来的对象仍保持不变。
运行结果:
source/pathlib/index.rst
source/pathlib/pathlib_from_existing.py
source/pathlib/pathlib_from_existing.pyc