目录:
什么是 pathlib
?PurePath
类的用法Path
类的用法
什么是pathlib
?
pathlib
是Python 3.4及以后版本中的一个标准库模块,它提供了一种面向对象的方法来处理文件系统路径。与传统的字符串处理方式相比,pathlib
更加直观、易于理解和使用。通过这个模块,可以更方便的进行文件和目录的操作。
PurePath 类的用法
下面是关于pathlib
模块中PurePath
类的一些常用实例属性和方法的表格,以及每个属性和方法的功能描述:
类实例属性和实例方法名 | 功能描述 |
---|---|
PurePath.parts | 返回路径字符串中所包含的各部分。 |
PurePath.drive | 返回路径字符串中的驱动器盘符。 |
PurePath.root | 返回路径字符串中的根路径。 |
PurePath.anchor | 返回路径字符串中的盘符和根路径。 |
PurePath.parents | 返回当前路径的全部父路径。 |
PurePath.parent | 返回当前路径的上一级路径,相当于 parents[0] 的返回值。 |
PurePath.name | 返回当前路径中的文件名。 |
PurePath.suffixes | 返回当前路径中的文件所有后缀名。 |
PurePath.suffix | 返回当前路径中的文件后缀名。相当于 suffixes 属性返回的列表的最后一个元素。 |
PurePath.stem | 返回当前路径中的主文件名。 |
PurePath.as_posix() | 将当前路径转换成 UNIX 风格的路径。 |
PurePath.as_uri() | 将当前路径转换成 URL。只有绝对路径才能转换,否则将会引发 ValueError 。 |
PurePath.is_absolute() | 判断当前路径是否为绝对路径。 |
PurePath.joinpath(*other) | 将多个路径连接在一起,作用类似于前面介绍的斜杠(/)连接符。 |
PurePath.match(pattern) | 判断当前路径是否匹配指定通配符。 |
PurePath.relative_to(*other) | 获取当前路径中去除基准路径之后的结果。 |
PurePath.with_name(name) | 将当前路径中的文件名替换成新文件名。如果当前路径中没有文件名,则会引发 ValueError 。 |
PurePath.with_suffix(suffix) | 将当前路径中的文件后缀名替换成新的后缀名。如果当前路径中没有后缀名,则会添加新的后缀名。 |
下面是一些示例代码:
from pathlib import PurePath
# 创建一个 PurePath 对象
path = PurePath('/home/user/documents/example.txt')
# 获取路径的各个部分
print(f"parts: {path.parts}") # 输出: ('\\', 'home', 'user', 'documents', 'example.txt')
# 获取驱动器盘符
print(f"drive: {path.drive}") # 输出: '' (对于 Unix 路径,通常为空)
# 获取根路径
print(f"root: {path.root}") # 输出: '\'
# 获取锚点(驱动器盘符和根路径)
print(f"anchor: {path.anchor}") # 输出: '\'
# 获取所有父路径
print(f"parents: {list(path.parents)}") # 输出: [PureWindowsPath('/home/user/documents'), PureWindowsPath('/home/user'), PureWindowsPath('/home'), PureWindowsPath('/')]
# 获取上一级路径
print(f"parent: {path.parent}") # 输出: '\home\user\documents'
# 获取文件名
print(f"name: {path.name}") # 输出: example.txt
# 获取所有后缀名
print(f"suffixes: {path.suffixes}") # 输出: ['.txt']
# 获取文件后缀名
print(f"suffix: {path.suffix}") # 输出: .txt
# 获取主文件名
print(f"stem: {path.stem}") # 输出: example
# 转换为 POSIX 风格路径
print(f"as_posix: {path.as_posix()}") # 输出: '/home/user/documents/example.txt'
# 转换为 URI
try:
print(f"as_uri: {path.as_uri()}")
except ValueError as e:
print(f"Error: {e}") # 输出: 'relative path can't be expressed as a file URI'
# 判断是否为绝对路径
print(f"is_absolute: {path.is_absolute()}") # 输出: False
# 连接多个路径
new_path = path.joinpath('subfolder', 'file.txt')
print(f"joinpath: {new_path}") # 输出: '\home\user\documents\example.txt\subfolder\file.txt'
# 匹配通配符
print(f"match: {path.match('**/*.txt')}") # 输出: True
# 获取相对路径
try:
relative_path = path.relative_to('/home/user')
print(f"relative_to: {relative_path}") # 输出: documents\example.txt
except ValueError as e:
print(f"Error: {e}")
# 替换文件名
new_name_path = path.with_name('new_example.txt')
print(f"with_name: {new_name_path}") # 输出: \home\user\documents\new_example.txt
# 替换文件后缀名
new_suffix_path = path.with_suffix('.log')
print(f"with_suffix: {new_suffix_path}") # 输出: \home\user\documents\example.log
Path
类的用法
pathlib
的核心类是Path
,Path
是PurePath
的子类,几乎所有的文件系统操作都可以通过这个类完成。Path
类提供了许多方法来执行常见的文件系统任务,比如检查文件是否存在、创建目录、列出目录内容等。
下面是关于 pathlib
模块中 Path
类的一些常用实例属性和方法的表格,以及每个属性和方法的功能描述:
类实例属性和实例方法名 | 功能描述 |
---|---|
Path.exists() | 检查路径是否存在。 |
Path.is_dir() | 检查路径是否为目录。 |
Path.is_file() | 检查路径是否为文件。 |
Path.is_symlink() | 检查路径是否为符号链接。 |
Path.is_block_device() | 检查路径是否为块设备。 |
Path.is_char_device() | 检查路径是否为字符设备。 |
Path.is_fifo() | 检查路径是否为 FIFO(命名管道)。 |
Path.is_socket() | 检查路径是否为套接字。 |
Path.mkdir(mode=0o777, parents=False, exist_ok=False) | 创建目录。 |
Path.glob(pattern) | 根据模式匹配路径。 |
Path.rglob(pattern) | 递归地根据模式匹配路径。 |
Path.iterdir() | 迭代目录中的条目。 |
Path.read_text(encoding=None, errors=None) | 读取文件内容为文本。 |
Path.write_text(data, encoding=None, errors=None, newline=None) | 写入文本到文件。 |
Path.read_bytes() | 读取文件内容为字节。 |
Path.write_bytes(data) | 写入字节到文件。 |
Path.unlink(missing_ok=False) | 删除文件。(这个参数是在 Python 3.8 中引入的。如果是 Python 3.7 或更早的版本,需自行处理文件不存在的情况。) |
Path.rmdir() | 删除空目录。 |
Path.rename(target) | 重命名文件或目录。 |
Path.replace(target) | 替换文件或目录。 |
Path.absolute() | 返回路径的绝对形式。 |
Path.resolve(strict=False) | 解析路径,返回绝对路径,解决符号链接。 |
Path.owner() | 获取路径的所有者用户名。 |
Path.group() | 获取路径的组名。 |
Path.chmod(mode) | 更改路径的权限模式。 |
Path.lchmod(mode) | 更改路径的权限模式(不跟随符号链接)。 |
Path.touch(mode=0o666, exist_ok=True) | 创建空文件或更新文件的访问和修改时间。 |
Path.samefile(other_path) | 检查两个路径是否指向同一个文件或目录。 |
Path.stat() | 获取路径的状态信息。 |
Path.lstat() | 获取路径的状态信息(不跟随符号链接)。 |
下面是一些示例代码:
from pathlib import Path
# 创建一个 Path 对象
file_path = Path('D:/shanhai.txt')
# 检查文件是否存在
if file_path.exists():
print("文件存在")
else:
print("文件不存在")
# 检查路径是否为文件
if file_path.is_file():
print("路径是文件")
else:
print("路径不是文件")
# 读取文件内容为文本
content = file_path.read_text(encoding='utf-8')
print(f"文件内容: {content}")
# 创建目录
new_directory = Path('D:/new_folder')
new_directory.mkdir(exist_ok=True)
# 列出目录内容
for item in new_directory.iterdir():
print(f"目录内容: {item.name}")
# 写入文本到文件
shanhai_file = Path('D:/shanhai.txt')
shanhai_file.write_text('Hello, World!', encoding='utf-8')
# 删除文件
# shanhai_file.unlink()
# 重命名文件
new_name = Path('D:/new_example.txt')
file_path.rename(new_name)
# 获取文件状态信息
stats = new_name.stat()
print(f"文件大小: {stats.st_size} 字节")
print(f"最后修改时间: {stats.st_mtime}")
# 检查两个路径是否指向同一个文件
another_path = Path('D:/new_example.txt')
if new_name.samefile(another_path):
print("两个路径指向同一个文件")
else:
print("两个路径指向不同的文件")