04.pathlib 库
大约 4 分钟学习笔记Python基础
一. 获取当前文件路径
1.1 os 模块获取当前文件路径
import os
v2 = os.getcwd()  # /Users/pupper/Documents/PythonObject/python_basi/demo41.2 获取当前文件夹路径
from pathlib import Path
v = Path.cwd()  # /Users/pupper/Documents/PythonObject/python_basi/demo41.3 获取当前文件路径
from pathlib import Path
p = Path(__file__)
print(p)  # /Users/pupper/Documents/PythonObject/python_basi/demo4/test1.py1.4 获取 Path 对象绝对路径
from pathlib import Path
p = Path('test2.py')
print(p)    # test2.py
print(p.absolute())
# /Users/pupper/Documents/PythonObject/python_basi/demo4/test2.py1.5 一些常用的获取文件属性
from pathlib import Path
# 当前文件路径
p = Path(__file__)
print(p.absolute())   # 获取绝对路径 /Users/pupper/Documents/PythonObject/python_basi/demo4/test1.py
print(p.resolve())    # 获取绝对路径 /Users/pupper/Documents/PythonObject/python_basi/demo4/test1.py
print(p.name)    # 获取文件名称 'test1.py'
print(p.stem)    # 只要文件名,不要后缀 test1
print(p.suffix)  # 获取文件 后缀.py
print(p.suffixes)  # 文件所有的后缀 ['.py']
print(p.parts)   # 拆分('/', 'Users', 'pupper', 'Documents', 'PythonObject', 'python_basi', 'demo4', 'test1.py')
print(p.parent)  # /Users/pupper/Documents/PythonObject/python_basi/demo4
print(p.parent.parent)  # /Users/pupper/Documents/PythonObject/python_basi
print(p.parents)  # 所有的父级 <PosixPath.parents>
print(p.anchor)  # 锚,目录前面的部分 /二. 获取上层、上上层目录
2.1 os 获取上上层目录
import  os
print(os.path.dirname(os.path.dirname(os.getcwd())))  # /Users/pupper/Documents/PythonObject2.2 pathlib 获取上上层目录
from pathlib import Path
print(Path.cwd().parent.parent)   # /Users/pupper/Documents/PythonObject三. 判断文件、文件夹
3.1 is_file() 判断是不是文件
from pathlib import Path
print(Path.cwd().is_file())
# 实例化调用
p = Path("./test.py")
print(p.is_file())3.2 is_dir() 判断是否为文件夹
from pathlib import Path
print(Path.cwd().is_dir())
# 实例化调用
p = Path("./test.py")
print(p.is_dir())3.3 exists() 判断文件或文件夹是否存在
from pathlib import Path
p = Path("./test.py")
print(p.exists())3.4 is_absolute() 判断是否是绝对路径
from pathlib import Path
p = Path(__file__)
print(p)
print(p.is_absolute())四. 拼接目录
4.1 os 拼接目录
import os
os.path.join(os.path.dirname(os.getcwd()), "test", "test.txt")4.2 pathlib 拼接目录
from pathlib import Path
# 当前文件路径
p = Path('./')
print(p.absolute())  # /Users/pupper/Documents/PythonObject/python_basi/demo4
print(p.joinpath('data.json'))  # data.json
print(p.joinpath('data.json').absolute())   # /Users/pupper/Documents/PythonObject/python_basi/demo4/data.json
# 拼接多层
print(p.joinpath('files', 'data.json'))   # files/data.json
print(p.joinpath('files', 'data.json').absolute())  # /Users/pupper/Documents/PythonObject/python_basi/demo4/files/data.json五. iterdir() 遍历文件目录

- .iterdir()遍历某个目录下的所有路径(文件和子目录)
from pathlib import Path
p = Path.cwd()
for i in p.iterdir():
    print(i.absolute())
# 运行结果
/Users/pupper/Documents/PythonObject/python_basi/demo4/test4.py
/Users/pupper/Documents/PythonObject/python_basi/demo4/test1.py
/Users/pupper/Documents/PythonObject/python_basi/demo4/__init__.py
/Users/pupper/Documents/PythonObject/python_basi/demo4/test2.py
/Users/pupper/Documents/PythonObject/python_basi/demo4/interface_log_2024-01-10_13-55-52_357941.log
/Users/pupper/Documents/PythonObject/python_basi/demo4/test3.py- 如果只需获取文件夹, 可以加个判断 .is_dir()
from pathlib import Path
p = Path.cwd()
print([i for i in p.iterdir() if i.is_dir()])六. glob() 和 rglob() 匹配 (正则表达式)
6.1 glob 只匹配当前目录
from pathlib import Path
p = Path('files')
# glob 只会遍历查找当前目录
print(p.glob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.glob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.glob('*.yml')])  # []6.2 rglob 递归所有子目录
from pathlib import Path
p = Path('files')
# glob 只会遍历查找当前目录
print(p.rglob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.rglob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.rglob('*.yml')])  # [WindowsPath('files/yaml/aa.yml'), WindowsPath('files/yaml/bb.yml')]七. 创建文件操作
7.1 touch() 创建文件
from pathlib import Path
p = Path('xx.json')
p.touch()   # 创建一个xx.json7.2 mkdir() 创建目录
创建一个目录
from pathlib import Path
p = Path('yoyo')
# mkdir 创建yoyo目录
p.mkdir()mkdir(parents=True) 递归创建多层目录
from pathlib import Path
p = Path('yoyo/json')
# mkdir 创建yoyo/json目录
p.mkdir(parents=True)八. 删除文件操作
8.1 rmdir() 只能删除空目录
from pathlib import Path
p = Path('yoyo/json')
# mkdir 创建yoyo/json目录
p.rmdir()8.2 unlink() 删除文件
from pathlib import Path
p = Path('files/username.txt')
p.unlink()九. 修改文件
9.1 replace() 移动文件
from pathlib import Path
p = Path('yo.txt')
p.write_text("hello world")
print(p.read_text())  # hello world
p.replace('xx.json')9.2 with_name() 重命名文件
from pathlib import Path
p = Path('hello.txt')
p.write_text("hello world")
print(p.read_text())  # hello world
# 重命名为一个新的文件对象
new_file = p.with_name('x.txt')
print(new_file)
p.replace(new_file)  # 移动到新的位置十. 创建文件并重命名
10.1 os 创建文件夹并重命名
import os
import os.path
# 创建 peoject/test 目录
os.makedirs(os.path.join('project', 'test'), exist_ok=True)
# 将test.txt 重命名为 project/tests.txt
os.rename('test.txt', os.path.join('project', 'tests.txt'))10.2 pathlib 模块的 Path 对象
from pathlib import Path
# 创建 project/test目录
Path('project/test').mkdir(parents=True, exist_ok=True)
# 将test.txt 重命名为 project/tests.txt
Path('test.txt').rename('project/test.txt')十一. pathlib 的常用基本方法
| 操作 | os and os.path | pathlib | 
|---|---|---|
| 绝对路径 | os.path.abspath | Path.resolve | 
| 修改权限 | os.chmod | Path.chmod | 
| 创建目录 | os.mkdir | Path.mkdir | 
| 重命名 | os.rename | Path.rename | 
| 移动 | os.replace | Path.replace | 
| 删除目录 | os.rmdir | Path.rmdir | 
| 删除文件 | os.remove,os.unlink | Path.unlink | 
| 工作目录 | os.getcwd | Path.cwd | 
| 是否存在 | os.path.exists | Path.exists | 
| 用户目录 | os.path.expanduser | Path.expanduser and Path.home | 
| 是否为目录 | os.path.isdir | Path.is_dir | 
| 是否为文件 | os.path.isfile | Path.is_file | 
| 是否为连接 | os.path.islink | Path.is_symlink | 
| 文件属性 | os.stat | Path.stat,Path.owner,Path.group | 
| 是否为绝对路径 | os.path.isabs | PurePath.is_absolute | 
| 路径拼接 | os.path.join | PurePath.joinpath | 
| 文件名 | os.path.basename | PurePath.name | 
| 上级目录 | os.path.dirname | PurePath.parent | 
| 同名文件 | os.path.samefile | Path.samefile | 
| 后缀 | os.path.splitext | PurePath.suffix |