from pathlib import Path
模块,文件系统路径处理
pathlib
是一个 Python 标准库,它提供了一种面向对象的方法来处理文件系统路径。它提供了许多类,但是最核心的是 Path
类,这是所有文件系统路径都应使用的类。
-
创建Path对象
使用
Path()
构造函数来创建一个Path
对象表示文件系统上的路径。pythonfrom pathlib import Path p = Path('/home/user/Documents') print(p)
输出:
tex\home\user\Documents
-
路径拼接
通过
/
操作符可以方便地构建子路径。pythonsub_path = p / 'project' / 'file.txt'
输出:
tex\home\user\Documents\project\file.txt
-
获取路径
Path.cwd()
: 返回当前工作目录。pythonfrom pathlib import Path p = Path.cwd() # 输出C:\Users\me\study
虽然输出的是字符串,但实际上是一个
# WindowsPath('C:\Users\me\study')
对象。显示内容由 Path 类的__repr__
定义。如果你只想得到字符串表示,不想要
WindowsPath
对象,可以用str()
转化:pythonstr(pathlib.Path.cwd())
-
路径的各部分
Path.parts
: 返回一个包含路径各部分的元组。Path.drive
: 返回驱动器的字母,比如C:
(主要是Windows相关)。Path.root
: 返回路径的根部分,例如\
。Path.anchor
: 返回路径的组合根和驱动器(如果有的话),等于drive + root
。
python
# 创建Path实例
p = Path('/usr/bin/python3/text.txt')
# 获取各部分
print(p.parts) # 输出: ('\\', 'usr', 'bin', 'python3', 'text.txt')
print(p.drive) # 在Unix上输出: ''
print(p.root) # 输出: '\'
print(p.anchor) # 输出: '\'
# 创建Path实例
p = Path(r'E:\2023-10\test\main.py')
# 获取各部分
print(p.parts) # 输出: ('E:\\', '2023-10', 'test', 'main.py')
print(p.drive) # 在Unix上输出: 'E:'
print(p.root) # 输出: '\'
print(p.anchor) # 输出: 'E:\'
-
路径的属性
Path.parent
: 返回路径的父目录。要获得上级的上级目录,可以连续调用,例如path.parent.parent
。Path.parents
: 返回一个由路径的逻辑父目录组成的可迭代对象。Path.name
: 返回路径中最后一部分的名称,这通常是文件或目录的名称。Path.stem
: 返回路径最后一部分的基础名称,即不带后缀。Path.suffix
: 返回路径最后一部分的扩展名。Path.suffixes
: 返回路径中最后一部分的所有扩展名,这在处理有多个扩展名的文件时很有用。
python# 创建Path实例 p = Path(r'E:/2023-10/test/main.py') # 获取路径属性 print(p.parent) # 输出: E:\2023-10\test print(list(p.parents)) # 输出: [WindowsPath('E:/2023-10/test'), WindowsPath('E:/2023-10'), WindowsPath('E:/')] print(p.name) # 输出: 'main.py' print(p.stem) # 输出: 'main' (如果是文件名为'main.tar.gz',则输出'main.tar') print(p.suffix) # 输出: '.py' (如果是文件名为'main.tar.gz',则输出'.gz') print(p.suffixes) # 输出: ['.py'] (如果是文件名为'main.tar.gz',则输出['.tar', '.gz'])
-
绝对路径与相对路径
Path.resolve()
: 解析路径,删除任何符号链接(如果在Unix上),并返回绝对路径。Path.is_absolute()
: 检查路径是否为绝对路径。Path.relative_to(*other)
: 计算相对于另一个路径的相对路径。
python
# 创建Path实例
p = Path('E:/2023-10/test/main.py')
# 绝对路径与相对路径
print(p.resolve()) # 输出绝对路径
print(p.is_absolute()) # 输出: True
# 假设当前目录是 E:/2023-10
print(p.relative_to('E:/2023-10')) # 输出: 'test\main.py'
-
路径存在性和类型
Path.exists()
: 检查路径是否存在。Path.is_dir()
: 检查路径是否是一个目录。Path.is_file()
: 检查路径是否是一个文件。Path.is_symlink()
: 检查路径是否是一个符号链接。
python# 路径存在性和类型 print(p.exists()) # 输出: True 或 False,取决于路径是否存在 print(p.is_dir()) # 输出: False print(p.is_file()) # 输出: True 或 False,取决于路径是否为文件 print(p.is_symlink()) # 输出: False
-
其他
Path.with_name(name)
: 返回与当前路径具有不同文件/目录名称的新路径。Path.with_suffix(suffix)
: 返回与当前路径具有不同文件后缀的新路径。
python# 创建Path实例 p = Path('E:/2023-10/test/main.py') # 更改名称和后缀 new_path = p.with_name('python3.8') print(new_path) # 输出: E:\2023-10\test\python3.8 new_suffix_path = p.with_suffix('.text') print(new_suffix_path) # 输出: E:\2023-10\test\main.py