目录
- 一、os模块
- 1、方法大纲
- 2、常用方法
- 二、glob模块
- 1、方法大纲
- 2、使用示例
- 三、shutil模块
- 1、方法大纲
- 2、压缩包
- 四、pathlib模块
- 1、对比图
- 2、路径获取
- 3、文件属性
- 4、文件判断
- 5、路径拼接
- 6、正则匹配
- 7、读写操作
一、os模块
1、方法大纲
2、常用方法
方法 | 描述 |
getcwd() | 获取当前工作目录 |
chdir(path) | 将当前的工作目录更改为指定的路径 |
listdir(path=None) | 列出指定目录中的文件名。如果 path 为 None,则使用 path=‘.’。 |
mkdir(path, mode=511, *, dir_fd=None) | 创建目录 |
makedirs(name, mode=511, exist_ok=False) | 递归创建多层目录 |
rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) | 重命名文件或目录 |
remove(path, *, dir_fd=None) | 删除文件 |
rmdir(path, *, dir_fd=None) | 删除目录 |
removedirs(name) | 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空抛出异常。 |
walk(top, topdown=True, onerror=None, followlinks=False) | 遍历 top 路径下的所有子目录,返回一个包含 3 个元素的元组:(dirpath, dirnames, filenames)。 |
os.curdir | 指代当前目录(‘.’) |
os.pardir | 指代上一级目录(‘…’) |
os.sep | 路径分割符(Windows 为 ‘\’,Linux 为 ‘/’) |
os.linesep | 行终止符(Windows 为 ‘\r\n’,Linux 为 ‘\n’) |
os.name | 指代当前使用的操作系统(Windows 系统为 ‘nt’,Linux 为 ‘posix’) |
二、glob模块
1、方法大纲
glob模块也是Python标准库中一个重要的模块,主要用来查找符合特定规则的目录和文件,并将搜索的到的结果返回到一个列表中。使用这个模块最主要的原因就是,该模块支持几个特殊的正则通配符,用起来贼方便,这个将会在下方为大家进行详细讲解。
2、使用示例
import glob
path1 = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a\[0-9].png"
print(glob.glob(path1))
path2 = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a\[0-9a-z].*"
print(glob.glob(path2))
注意:这个函数里面还有一个参数,recursive
,当其为真时,则模式’**'将与任何文件匹配,并且
零或更多目录和子目录。
三、shutil模块
1、方法大纲
os模块是Python标准库中一个重要的模块,里面提供了对目录和文件的一般常用操作。而Python另外一个标准库——shutil模块,它作为os模块的补充,提供了复制、移动、删除、压缩、解压等操作,这些 os 模块中一般是没有提供的。但是需要注意的是:shutil模块对压缩包的处理是调用ZipFile
和TarFile
这两个模块来进行的。
2、压缩包
对压缩包管理是使用zipfile
模块
import zipfile
import os
file_list = os.listdir(os.getcwd()) # 获取当前目录
# 将上述所有文件,进行打包,使用“w”
with zipfile.ZipFile(r"我创建的压缩包.zip", "w") as zipobj: # 对文件进行压缩
for file in file_list:
zipobj.write(file) # 将文件写入压缩包中
四、pathlib模块
1、对比图
操作 | 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 |
2、路径获取
获取当前工作目录
import pathlib
print(pathlib.Path.cwd()) # 虽然在这里打印出来的很像一个字符串,但实际上得到的是一个WindowsPath对象
# 其实现了 __repr__ 和 __str__ 底层方法
print(pathlib.Path(__file__)) # 获取当前文件路径
工作目录是在哪个目录下运行你的程序,不是项目目录
获取家目录
import pathlib
print(pathlib.Path.home()) # 获取当前用户的家目录
获取文件绝对路径
from pathlib import Path
# 当前文件路径
p = Path(__file__)
print(p)
print(p.absolute()) # 将路径转换为绝对路径,p.resolve()功能也是一样的
遍历当前目录
from pathlib import Path
# 当前文件路径
p = Path('files')
for i in p.iterdir():
print(i.absolute())
"""运行结果:
C:\Users\3500\PycharmProjects\untitled3\demo\files\json
C:\Users\3500\PycharmProjects\untitled3\demo\files\username.txt
C:\Users\3500\PycharmProjects\untitled3\demo\files\yaml
"""
3、文件属性
from pathlib import Path
# 当前文件路径
p = Path(__file__)
print(p.absolute()) # 获取绝对路径
print(p.resolve()) # 获取绝对路径
print(p.name) # 获取文件名称 'test.py'
print(p.stem) # 只要文件名,不要后缀 test
print(p.suffix) # 获取文件 后缀.py
print(p.suffixes) # 文件所有的后缀 ['.py']
print(p.parts) # 拆分('C:\\', 'Users', '3500', 'PycharmProjects', 'untitled3', 'demo', 'test.py')
print(p.parent) # 获取当前路径的父级目录,C:\Users\35000\PycharmProjects\untitled3\demo
print(p.parent.parent) # C:\Users\3500\PycharmProjects\untitled3
print(p.parents) # 所有的父级 <WindowsPath.parents>
print(p.anchor) # 锚,目录前面的部分 C:\ 或者 /
4、文件判断
from pathlib import Path
# 1. is_file() 判断是不是文件
print(Path.cwd().is_file()) # False
# 2. is_dir() 判断是不是文件夹
print(Path.cwd().is_dir()) # True
# exists() 判断文件是否存在
p = Path('./data.json')
print(p.exists()) # True or False
from pathlib import Path
# 当前文件路径
p = Path(__file__) # 获取当前文件的路径
print(p.is_absolute()) # True
5、路径拼接
from pathlib import Path
# 当前文件路径
p = Path('./')
print(p.absolute()) # C:\Users\3500\PycharmProjects\untitled3\demo
print(p.joinpath('data.json')) # data.json
print(p.joinpath('data.json').absolute()) # C:\Users\3500\PycharmProjects\untitled3\demo\data.json
# 拼接多层
print(p.joinpath('files', 'data.json')) # files\data.json
print(p.joinpath('files', 'data.json').absolute()) # C:\Users\3500\PycharmProjects\untitled3\demo\files\data.json
6、正则匹配
使用模式匹配(正则表达式)匹配指定的路径。glob 只会匹配当前目录下, rglob 会递归所有子目录
比如在当前脚本的 files 目录有以下文件夹和子文件
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')]) # []
# rglob 只会遍历查找当前目录以及其子目录
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')]
p_ = Path('data.json')
# math 检查匹配规则
print(p_.match('*.json')) # True
7、读写操作
pathlib 对读取和写入进行了简单的封装,不再需要重复去打开文件和管理文件的关闭了。
.read_text()
读取文本.read_bytes()
读取 bytes.write_text()
写入文本.write_bytes()
写入 tytes
from pathlib import Path
p = Path('yo.txt')
p.write_text("hello world")
print(p.read_text()) # hello world
file.write
操作使用的是 w 模式,如果之前已经有文件内容,将会被覆盖。
当然,pathlib
还可以进行文件的创建,删除,以及修改操作,其与os
中的方法一样,可以自行去研究