1. 概述
Pathlib模块供给了表示文件体系途径的类,其语义适用于不同的操作体系。途径类分为纯途径和详细途径,前者供给无I/O的纯核算操作,后者继承纯途径,但也供给I/O操作。
2. 与os模块中函数对应关系
下表将各种os模块函数映射到相应的PurePath/Path等价函数。
尽管os.path.relpath()和PurePath.rerelative_to()有一些堆叠的用例,但它们的语义差异足以保证不认为它们是等效的。
函数详细效果请参考官网: (pathlib — Object-oriented filesystem paths — Python 3.9.17 documentation)
3. pathlib模块内置函数
3.1 获取目录
-
Path.cwd()
, 回来文件当时地点目录 -
Path.home()
,回来用户的主目录
from pathlib import Path
current_path = Path.cwd()
home_path = Path.home()
print(f"文件当时地点目录:{current_path }\n用户主目录:{home_path}")
输出:
文件当时地点目录:E:\CYX_DeepLearning
用户主目录:C:\Users\22799
3.2 目录拼接
from pathlib import Path
parts = ['dataset', '1.txt']
print(Path.cwd())
print(Path.cwd().joinpath(*parts))
print(Path.cwd().parent.joinpath(*parts))
print(Path.cwd().parent.parent.joinpath(*parts))
输出:
E:\CYX_DeepLearning
E:\CYX_DeepLearning\dataset\1.txt
E:\dataset\1.txt
E:\dataset\1.txt
斜杠 / 操作符用于拼接途径
from pathlib import Path
newPath = Path.cwd() / 'python'
print(Path.cwd())
print(f"目录为:{newPath}")
输出;
E:\CYX_DeepLearning
目录为:E:\CYX_DeepLearning\python
3.3 创立、删去目录, 核算相对途径
-
Path.mkdir()
,创立给定途径的目录。 -
Path.rmdir()
,删去该目录,目录文件夹必须为空。 -
Path.relative_to()
,用于获取一个途径相对于另一个基础途径的相对途径。 -
Path.unlink()
办法用于删去指定途径所指向的文件或符号链接
from pathlib import Path
# mkdir()办法默认情况下不会创立父级目录。假如你想要创立嵌套的目录结构,你需求设置 parents=True 参数。
# 创立一个名为 "1.txt" 的新目录
path = Path(Path.cwd()/'1.txt')
path.mkdir()
# 也能够使用多级目录途径创立目录
nested_path = Path(Path.cwd()/'3'/'2.txt')
nested_path.mkdir(parents=True)
from pathlib import Path
# 删去一个空目录
path = Path("/path/to/directory")
path.rmdir()
FileNotFoundError: [WinError 3] 体系找不到指定的途径。: '\\path\\to\\directory'
from pathlib import Path
base_path = Path("/home/user")
file_path = Path("/home/user/documents/file.txt")
relative_path = file_path.relative_to(base_path)
print(relative_path)
输出;
documents\file.txt
from pathlib import Path
file_path = Path("/path/to/file.txt")
file_path.unlink()
3.4 读写文件
-
Path.open(mode=’r’)
,以 “r” 格局翻开 Path 途径下的文件,若文件不存在即创立后翻开。 -
Path.read_bytes()
,读取指定途径下的文件,并以文本方式回来文件的内容,同等 open 操作文件的 “rb” 格局。 -
Path.read_text()
,翻开 Path 途径下的文件,以 str 格局读取文件内容,同等 open 操作文件的 “r” 格局。 -
Path.write_bytes()
,将字节数据写入指定途径下的文件,同等 open 操作文件的 “wb” 格局。 -
Path.write_text()
,将文本内容写入指定途径下的文件。,同等 open 操作文件的 “w” 格局。
from pathlib import Path
file_path = Path("/path/to/file.txt")
# 以只读模式翻开文件
file_obj = file_path.open()
# 以写入模式翻开文件
file_obj = file_path.open(mode='w')
# 以追加模式翻开文件
file_obj = file_path.open(mode='a')
with file_path.open(mode='w') as file_obj:
file_obj.write("这是要写入的语句。\n")
file_obj.write("这是第二个语句。\n")
from pathlib import Path
# 读取文件内容并回来字符串
file_path = Path("/path/to/file.txt")
file_content = file_path.read_text()
# 输出文件一切内容
print(file_content)
from pathlib import Path
# 将字节数据写入文件
file_path = Path("./1.txt")
data = b"Hello, world!" # 字节数据
file_path.write_bytes(data)
from pathlib import Path
# 将文本写入文件
file_path = Path("/path/to/file.txt")
text = "Hello, world!" # 文本内容
file_path.write_text(text)
3.5 获取文件地点目录的不同部分字段
-
Path.resolve()
,经过传入文件名,回来指定途径的绝对途径。 -
Path.parts
特点回来途径中不带分隔符的各个部分组成的元组。 -
Path.name
,特点回来指定途径的根本文件名或目录名,包括后缀名。 -
Path.rename()
,重命名途径 -
Path.parent
,特点回来指定途径的父级途径。 -
Path.parents
特点回来指定途径的一切父级途径。 -
Path.stem
,回来指定途径的文件名或目录名的根本称号部分,不包括后缀名。 -
Path.suffix
,回来指定途径的文件的后缀(扩展名)部分。 -
Path.anchor
,回来指定途径的根部分或驱动器部分。 -
Path.drive
,回来驱动器称号。 -
Path.root
,回来途径的根目录。
from pathlib import Path
file_path = Path("/path/to/file.txt")
print(file_path.parts)
输出:
('\\', 'path', 'to', 'file.txt')
from pathlib import Path
path = Path("/path/to/old_name.txt")
new_path = path.rename("/path/to/new_name.txt")
print(new_path) # 输出:/path/to/new_name.txt
3.6 文件、途径是否存在判别
-
Path.exists()
:用于检查指定途径是否存在。 -
Path.is_dir()
:用于检查指定途径是否是一个目录。 -
Path.is_file()
:检查指定途径是否是一个文件。 -
Path.is_absolute()
,用于检查途径是否为绝对途径。
from pathlib import Path
file_path = Path("/path/to/file.txt")
exists = file_path.exists()
# 输出途径是否存在
print(exists)
3.7 文件统计以及匹配查找
-
Path.iterdir()
:办法回来一个迭代器,用于遍历指定途径下的一切子项(文件和目录) -
Path.glob(pattern)
,办法回来一个迭代器,用于匹配指定途径下的文件和目录。 -
Path.rglob(pattern)
,回来一个递归迭代器,用于递归地匹配指定途径及其子目录下的文件和目录。
from pathlib import Path
# 只回来该文件夹内的文件和目录
dir_path = Path("/path/to/directory")
for item in dir_path.iterdir():
print(item)
from pathlib import Path
dir_path = Path("/path/to/directory")
for item in dir_path.glob("*.txt"):
print(item)
from pathlib import Path
dir_path = Path("/path/to/directory")
for item in dir_path.rglob("*.txt"):
print(item)
参考:
[1.](pathlib — Object-oriented filesystem paths — Python 3.9.17 documentation)
[2.](【34】pathlib 模块 – 掘金 ())