Python四大模块文件管理介绍
作者:A-L-Kun
一、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
中的方法一样,可以自行去研究
到此这篇关于Python四大模块文件管理介绍的文章就介绍到这了,更多相关Python文件管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!