os模块
os 表示的是操作系统,该模块主要是处理与操作系统相关的操作
最常用的是文件操作 打开,读取,写入,删除,复制,重命名等
什么时候用os模块? 当需要操作文件及文件夹的时候,重点是在对文件的增删查上
1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 3 os.curdir 返回当前目录: ('.') 4 os.pardir 获取当前目录的父目录字符串名:('..') 5 os.makedirs('dirname1/dirname2') 可生成多层递归目录 6 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 7 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname 8 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 9 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 10 os.remove() 删除一个文件 11 os.rename("oldname","newname") 重命名文件/目录 12 os.stat('path/filename') 获取文件/目录信息 13 os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" 14 os.linesep 输出当前平台使用的行终止符,win下为" ",Linux下为" " 15 os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: 16 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' 17 os.system("bash command") 运行shell命令,直接显示 18 os.environ 获取系统环境变量
os.path模块
path 翻译为路径,用于处理路径
python跨平台,各平台的路径书写方式不同,所有将所有与路径相关的都进行了封装,使用后不会因为路径产生错误
总结:主要处理路径,不会关心路径是否存在,只是做拼接,剪切,转换等操作通常与os一起使用,优点是:处理路径可以跨平台的
1 os.path.abspath() 返回绝对路径,将当前执行文件所在的文件夹与参数进行拼接 2 os.path.spilt() 将路径分割为文件夹和文件 3 os.path.dirname() 返回文件夹名称 4 os.path.basename() 返回文件名称 5 os.path.exists() 如果path存在则返回True,不存在则返回False 6 os.path.isabs() 判断是否是绝对路径,判断依据是第一个字符是否为路径分隔符 7 os.path.isfile() 判断路径是否文件,不是一个文件必然是一个文件夹 8 os.path.isdir() 是否目录 9 os.path.join() 将多个路径组合后返回,以当前平台的路径分隔符分隔,如果有多个盘符取的是最后一个 10 os.path.getatime() 返回最后存取时间 11 os.path.getmtime() 返回最后修改时间 12 os.path.getsize() 返回pyth的大小 13 normcase() 返回规范路径,大写变小写,反斜杠转换为正斜杠 14 normpath() 执行点或点点,返回上级或上上级,反斜杠转换为正斜杠
subprocess 模块
进程是一个正在运行的程序,subprocess称之为子进程
为什么要用子进程?一个程序在运行过程中需要启动另外一个程序
为什么使用? 有一个任务需要处理,而自己的程序无法处理,所以需要开启一个程序
例如python想要获取所有的进程(任务列表)信息
os.system 在执行系统之灵时,也可以命令操作系统启动某个程序
os.system 在执行时,直接把结果输出到控制台,无法获取执行结果
subprocess 不仅可以启动子进程,还能与子进程进行数据交互
1 tasklist | findstr cmd 2 3 import subprocess 4 #dir 要执行的指令 shell表示dir是一个命令 stdout 指定输出管道 5 #什么是管道? 相当于生活中的管子,可以从一个地方通向另一个地方 6 #管道的作用就是将一个进程中的数据传输给另一个进程的,本质上是读写同一个文件 7 p = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE) 8 print(p.stdout.read()) 9 #启动一个dir子进程,并将结果输出到指定管道 10 11 #启动一份tasklist子进程,指定输出结果到管道 12 p1 = subprocess.Popen('tasklist',shell=True,stdout=subprocess.PIPE) 13 #启动一个findstr的子进程,将p1进程的结果作为p2进程的输入 14 p2 = subprocess.Popen('findstr cmd',#要执行的指令 15 shell=True, #第一个参数是否是一个指令 16 stdin=p1.stdout, #指定输入管道 17 stdout=subprocess.PIPE, #指定输出管道 18 stderr=subprocess.PIPE)#表示错误信息 当程序出错时,在错误管道中查看结果 19 20 print(p2.stdout.read()) 21 print(p2.stdout.read().decode('GBK'))
configparper模块
作为配置信息很少做修改
read读取配置文件
添加
add_setion 添加分区
set 如果没有这个选项则添加
删除
remove_option
remove_section
判断是否存在某个
cfg.has_option
fg.has_setion
1 section#分区 可以存在多个分区,但是不能重名 2 #同一个分区下不能有重复的option 3 option #选项 4 5 import configparser 6 7 cfg = configparser.Confgpaper() 8 9 #读取名为filename的配置文件 10 cfg.read('filename',encodeing = 'utf-8') 11 #获取分区 12 cfg.section() 13 #获取某个分区下的某个选项 第一个参数为分区名,第二个为选项名称 14 lock = cfg.getboolean('','') 15 #封装了类型转换更加方便 16 cfg.gerfloat() 17 cfg.gerint() 18 cfg.getboolean() 19 读取某个配置文件的信息的步骤: 20 1.读取某个配置文件 21 2.调用get函数 22 #修改内容 23 import configparser 24 cfg = configparser.Confgpaper() 25 cfg.read('filename',encodeing = 'utf-8') 26 cfg.set('','','') 修改 27 with open('',mode='',encodeing='') as f: 28 cfg.write(f) 29 #添加内容 30 import configparser 31 cfg = configparser.Confgpaper() 32 cfg.read('filename',encodeing = 'utf-8') 33 cfg.add_section('') 34 cfg.add_option('','') 35 with open('',mode='',encodeing='') as f: 36 cfg.write(f) 37 #删除 38 cfg = configparser.Confgpaper() 39 cfg.read('filename',encodeing = 'utf-8') 40 cfg.remove_section('') 41 cfg.remove_option('') 42 with open('',mode='',encodeing='') as f: 43 cfg.write(f)
shutil 模块
shutil 提供一个工具包封装了文件高级操作
功能与os有些重叠,os只能处理文件是否存在,路径是否正确,无法直接完成copy功能
shutil 提供压缩与解压缩
#压缩文件支持格式 .zip .tar
import shutil
shutil.make_archive('文件夹路径','format',r'除本身之外的路径')
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
创建压缩包并返回文件路径,例如:zip、tar
- base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如 data_bak =>保存至当前路径
如:/tmp/data_bak =>保存至/tmp/ - format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
- root_dir: 要压缩的文件夹路径(默认当前目录)
- owner: 用户,默认当前用户
- group: 组,默认当前组
- logger: 用于记录日志,通常是logging.Logger对象
#解压缩
shutil.unpack_archive('文件夹路径','format',r'除本身之外的路径')
1 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 2 shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w')) 3 shutil.copyfile(src, dst) 拷贝文件 4 shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在 5 shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变 6 shutil.copymode('f1.log', 'f2.log') #目标文件必须存在 7 shutil.copystat(src, dst)仅拷贝状态的信息,包括:mode bits, atime, mtime, flags 8 shutil.copystat('f1.log', 'f2.log') #目标文件必须存在 9 shutil.copy(src, dst)拷贝文件和权限 10 shutil.copy('f1.log', 'f2.log') 11 shutil.copy2(src, dst) 拷贝文件和状态信息 12 shutil.copy2('f1.log', 'f2.log') 13 shutil.ignore_patterns(*patterns) 14 shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件夹 15 shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除 16 shutil.rmtree(path[, ignore_errors[, onerror]]) 递归的去删除文件 17 shutil.rmtree('folder1') 18 shutil.move(src, dst) 递归的去移动文件,它类似mv命令,其实就是重命名。 19 shutil.move('folder1', 'folder3')