Python——必学内置模块 Pathlib

19 阅读3分钟

基础使用——Path

from pathlib import Path

p = Path(".")
# .代表当前路径(相对路径)

print([x for x in p.iterdir() if x.is_file()])
# 输出当前目录下所有文件

print([x for x in p.glob("**/*.py")])
# 输出当前目录下所有.py文件

q = Path(r"C:\Program Files\1.py")
print(q.drive)
# 输出路径的驱动器名称

print(q.root)
# 输出路径的根目录

print(q.anchor)
# 输出路径的驱动和根

q1 = Path(r"\Program Files")
print(q1.anchor)
# 如果只有驱动和根只有一个,则只输出一个

print(q.parent)
# 输出路径的父目录,即上级目录,如果上级目录是根目录,则返回空字符串
q2 = Path(r"\Program Files/a/b")
print(q2.parent)
# 输出:Program Files/a

print(q.name)
print(q2.name)
# 输出最后一级的文件名

print(q.suffix)
# 输出最后一个路径组件中以点分割的后一部分,即文件扩展名,如果没有文件扩展名,则输出空字符串

q3 = Path(r"Program Files/l.tar.gar")
print(q3.suffixes)
# 输出文件拓展名组成的列表

print(q.stem)
# 输出最后一个路径组件中以点分割的前一部分,即文件名,如果没有文件名,则输出空字符串

print(q.as_posix())
# 输出以正斜杠表示的路径

print(q.is_absolute())
# 判断路径是否是绝对路径

print(q.is_relative_to(q1))
# 判断q是否为q1的子路径

print(q1.joinpath("a", "1.txt"))
# 将q1和目标路径合并成一个路径

print(q.match("*/1.py"))
# 判断路径是否匹配给定的模式

q4 = q.with_name("2.py")
print(q)
print(q4)
# 对最后一级文件名进行修改,并返回新路径(前提是路径中必须有文件名)

q5 = q.with_suffix(".txt")
print(q)
print(q5)
# 对文件扩展名进行修改,并返回新路径(如果原本路径没有后缀,则会进行追加,也可以通过空字符串来移除之前的后缀)

q6 = q.with_stem("2")
print(q)
print(q6)
# 对文件名进行修改,并返回新路径,源路径没有文件名则会引发ValueError
  • 路径的基本组成部分如下:

image.png

文件路径的增删改查

from pathlib import Path
import datetime

p = Path(r'D:\Code\test.py')

p.touch(mode=0o666, exist_ok=True)
# 创建指定文件,如果文件已存在,则当参数exist_ok为真值时函数将成功执行

p.mkdir()
# 使用给定的路径新建目录,同样可以使用参数exist_ok

p.symlink_to(r"D:\Code\1.py")
# 将文件路径指向某个文件或文件夹,文件将是symlink类型的文件,没有大小,只是对目标文件的一个引用

p.rename(r"D:\Code\Py神之路\test.py")
# 将文件重命名, 文件不能已存在

p.replace(r"D:\Code\Py神之路\test.py")
# 和rename不同的是,如果文件已经存在,replace方法会进行替换

p.unlink()
# 移除文件的指向链接

p.rmdir()
# 移除文件目录, 目录必须为空

p.chmod(0o666)
# 改变文件权限, 0o666代表

print(p.exists())
# 判断文件是否存在
print(p.is_file())
# 判断是否是文件
print(p.is_dir())
# 判断是否是文件夹
print(p.iterdir())
# 包含所有子文件的生成器
print(p.glob("**/*.py"))
# 包含所有匹配文件的生成器

file_stat = p.stat()
# 打印文件的详细信息
print(f"文件大小: {file_stat.st_size} 字节")
print(f"文件权限: {oct(file_stat.st_mode)}")
print(f"最后访问时间: {datetime.datetime.fromtimestamp(file_stat.st_atime)}")
print(f"最后修改时间: {datetime.datetime.fromtimestamp(file_stat.st_mtime)}")
print(f"创建时间: {datetime.datetime.fromtimestamp(file_stat.st_ctime)}")

上述就是pathlib模块的常用方法,大家可能会注意到,我们并没有写到复制(copy)和删除(delete),原因是pathlib中没有这两个方法(虽然copy在官方文档中有,但是并不能用)

对于这些pathlib中没有的操作,我们需要借助OS或者shutil模块来帮助我们完成