os模块、os.path模块、shutil模块、configparser模块、subprocess模块
一.os模块
os指的是操作系统
该模块主要用于处理与操作系统相关的操作,常用的是文件操作(读、写、删、复制、重命名)。
os.getcwd() 获取当前文件所在的文件夹路径
os.chdir() 修改当前工作目录
os.makedirs() 创建多级目录(不存在时,则创建)
os.mkdir() 创建单级目录
os.rmdir() 删除文件夹(文件夹为空,则删除)
os.listdir() 列出指定目录下的所有文件及子目录(存在一个列表中)
os.stat() 获取文件信息
os.sep() 获取当前系统的路径分隔符
os.system() 执行系统命令
os.environ 获取系统环境变量
os.linesep() 获取换行符
# 当前执行文件所在的文件夹路径
# print(os.getcwd()) # 修改当前的工作目录
# os.chdir(r"D:\脱产5期内容\day19") # 获取当前目录的 字符串表现方式 .
# print(os.curdir)
# 获取当前目录的 字符串表现方式 ..
# print(os.pardir) # 创建多级目录 可以自动创建中间的目录 如果不存在
# os.makedirs("a/b/c")
# 只能创建单级目录 会把c1和a1当成已存在的路径
# os.mkdir("c1/a1/b1") # 删除文件夹 必须保证文件夹是空的 才能删除
# os.rmdir("a") # 如果要删除一个文件夹 而且文件夹不为空 ,思路是 先遍历这个文件夹中的所有文件 和文件夹
# 先把里面的内容全部删除 最后再删除文件夹 # os.rmdir("b") # 要删除的文件路径
# path = r"D:\脱产5期内容\day19\b"
#
# for f in os.listdir("b"):
# f_path = path + "\\" + f
# os.remove(f_path)
#
# os.rmdir("b")
#注意遍历删除文件时 listdir 得到的是文件名称 需要手动拼接完整路径 # print(os.stat("os模块.py")) # 获取当前的路径分割符 当你的程序要跨平台时 路径分隔符不能直接写死 要从os中获取,
# 因为每个平台不同
# print(os.sep) # 获取换行符
# print(os.linesep) # 执行系统命令
# print(os.system("dir")) # print(os.environ) # 什么时候使用os 当需要操作文件 及文件夹的时候
# 重点放在对文件的增删改查
二.os.path模块
该模块用于处理路径,由于各平台的路径书写方式不同,所以用path进行封装,实现跨平台。
os.path.abspath() 返回绝对路径(把当前执行文件所在的文件夹与括号内的参数进行拼接)
os.path.split() 将路径分隔为文件夹和文件名(存成元组)
os.path.dirname() 获取路径中文件夹路径
os.path.basename() 获取路径中的文件名
os.path.exists() 判断文件路径是否存在
os.path.isabs() 判断是否是绝对路径(依据是:第一个字符是路径分隔符,则为绝对路径,反之,则为相对路径)
os.path.isfile() 判断路径是否存在一个文件
os.path.isdir() 判断路径是否存在一个文件夹
os.path.join() 以当前平台的路径分隔符,拼接路径
os.path.getsize() 获取文件大小
os.path.getstime() 获取最后存取时间
os.path.getmtime() 获取最后修改时间
os.path.normcase() 规范化路径(大写变小写,‘/’变‘\’)
os.path.normpath() 规范化路径(‘/’变'\',且会执行里面的‘..’(返回上一级))
# 返回绝对路径 其实就是把当前执行文件所在的文件夹 与你给的参数做了拼接
# print(os.path.abspath("path模块.py")) # 将路径分割为文件夹和文件名
# print(os.path.split(r"D:\脱产5期内容\day19\path模块")) # 获取路径中的文件夹路径
# print(os.path.dirname(r"D:\脱产5期内容\day19\path模块\path模块.py"))
# 获取路径中的文件名称
# print(os.path.basename(r"D:\脱产5期内容\day19\path模块\path模块.py")) # 判断一个路径是否存在
# print(os.path.exists(r"D:\脱产5期内容\day19\path模块\path模块.py")) # 判断是否是绝对路径 依据是 第一个字符 是不是路径分割符合 是表示绝对路径
# print(os.path.isabs(r"脱产5期内容\day19path模块")) # 不是一个文件 必然是一个文件夹
# 判断路径是否是一个文件
# print(os.path.isfile(r"D:\脱产5期内容\day19\path模块\path模块.py")) # # 判断路径是否是一个文件夹
# print(os.path.isdir(r"D:\脱产5期内容\day19\path模块\path模块.py")) # # 以当前平台的路径分割符来拼接路径 如果有多个盘符 取得是最后一个
# print(os.path.join("D:\\","A:\\","b")) # 获取文件大小
# print(os.path.getsize(r"D:\脱产5期内容\day19\path模块\path模块.py")) # 获取最后存取时间
# print(os.path.getatime(r"D:\脱产5期内容\day19\path模块\path模块.py"))
#
# # 获取最后修改时间
# print(os.path.getmtime(r"D:\脱产5期内容\day19\path模块\path模块.py")) # 返回规范化路径 大写变成小写,反斜杠变成正斜杠
print(os.path.normcase(r"D:/脱产5期内容/day19/path模块/path模块.py")) # 把反斜杠 转为正斜杠 并且 会执行里面..(用于返回上一级目录)
print(os.path.normpath(r"D:\脱产5期内容/day19\path模块\..\..\..\..")) # 总结:主要处理路径 不会关系路径是否存在 只是 做拼接 剪切 转换等等操作
# 通常是与os 一起使用
# 优点: 用它处理的路径是可以跨平台的
三.subprocess模块
subprocess指的是子进程,进程指的是一个正在运行的程序,而子进程指的是由另一个正在运行的程序启动的程序。
subprocess不仅可以启动子进程,还可以与子进程进行数据交互。
应用场景:当我们有一个任务需要处理,而自己的程序无法处理时,这时就需要开启另一个程序。
# import os
# # os.system(r'"D:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"')
# res = os.system("dir")
# print(res)
# os.system 在执行系统指令时 也可以命令操作系统启动某个程序 # os.system在执行时 直接把结果输出到了 控制台 如果我们要获取执行的结果 就无能为力了 # subprocess 不仅可以启动子进程 还能与子进程进行数据交互 import subprocess
# dir 表示要执行命令
# shell 表示dir是一个命令
# stdout指定输出管道
# 管道是什么? 相当于生活中的水管 水可以通过管道 从一个地方流到另一个地方
# 在程序中 数据相当于水 管道的作用,就从一个进程中把数据传输到另一个进程
# 本质上是读写同一个文件 # p = subprocess.Popen("dir",shell=True,stdout=subprocess.PIPE)
# print(p.stdout.read())
# 上面代码是 启动了一个dir子进程 并将结果输出到指定管道 # 启动一个tasklist子进程 指定输出结果到管道中
p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE) # 启动一个findstr的子进程 将p1进程的结果作为p2进程输入
p2 = subprocess.Popen("findstr cmd", # 要执行的指令
shell=False,# 第一个参数是否是一个指令
stdin=p1.stdout, # 指定输入管道
stdout=subprocess.PIPE,#指定输出管道
stderr=subprocess.PIPE) # 表示错误管道 当进程执行出错时 可以在错误管道中获取结果 # 读取p2进程的结果
print(p2.stdout.read())
print(p2.stderr.read().decode("GBK")) # 总结 当你需要在python中启动一个子进程 并且它进行数据交互时就使用subprocess
# 如果不需要数据交互 可以使用os.system
四.configparser模块
configparser:解析配置文件
#配置文件 text.cfg [mysql]
username = jack
password = 123
lock = true [django] #configparser模块.py import configparser # 创建一个配置文件解析器
cfg = configparser.ConfigParser()
# 读取名为test.cfg的配置文件
cfg.read("test.cfg",encoding="UTF-8") # 获取分区
print(cfg.sections()) # 获取某个分区下的某个选项 第一个参数分区名 第二个选项名称
username = cfg.get("mysql","username")
print(username)
print(type(username)) password = cfg.get("mysql","password") # lock = cfg.get("mysql","lock")
# print(lock)
# print(type(lock))
#
# print(bool(lock)) #
# lock = cfg.getboolean("mysql","lock")
# print(type(lock))
# print(lock) # 以下三个函数是帮你封装了 类型转换
# cfg.getfloat()
# cfg.getint()
# cfg.getboolean() # 读取配置信息 两步
# 1.读取某个配置文件
# 2.调用get函数
#configparser增加、修改、删除.py import configparser # 修改
# cfg = configparser.ConfigParser()
# cfg.read("test.cfg",encoding="utf-8")
#
#
#
# # 将mysql分区下的lock改为True
# cfg.set("mysql","lock","true")
#
# with open("test.cfg","wt",encoding="UTF-8") as f:
# cfg.write(f) # # 添加新的选项 port 值为3306
# cfg = configparser.ConfigParser()
# cfg.read("test.cfg",encoding="utf-8")
#
#
#
# # 添加新的分区
# cfg.add_section("新分区")
# # 添加新的选项 port 值为3306
# cfg.set("mysql","port","3306")
#
# with open("test.cfg","wt",encoding="UTF-8") as f:
# cfg.write(f) # 删除
cfg = configparser.ConfigParser()
cfg.read("test.cfg",encoding="utf-8") # 删除分区
cfg.remove_section("新分区")
# 删除某个分区的选项
cfg.remove_option("mysql","port") # 判断是否存在某个分区
print(cfg.has_section("mysql"))
# 判断是否存在某个选项
print(cfg.has_option("mysql","username")) with open("test.cfg","wt",encoding="UTF-8") as f:
cfg.write(f) # 作为配置文件 最常用的操作就是读取 很少会做修改
# 总结: read读取配置文件
# add_section 添加分区
# set 如果没有这个选项则添加
# remove_section 删除分区
# remove_option 删除选项
configparser增删改
五.shutil模块
文件的高级操作,还有压缩与解压。
shutli.copyfileobj(fsrc,fdst[,length]) 将文件内容拷贝到另一个文件中
shutil.copyfile(src,dst) 拷贝文件(目标文件无需存在)
shutil.copymode(src,dst) 仅拷贝文件权限
shutil.copystat(src,dst) 仅拷贝文件的状态信息(mode bits,atime,mtime,flags)
shutil.copy(src,dst) 拷贝文件和权限
shutil.copy2(src,dst) 拷贝文件和状态信息
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件夹
shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名
import shutil
# shutil.copyfile(r"D:\脱产5期内容\day19\shutil模块\shutil模块.py",r"D:\脱产5期内容\day19\shutil模块\shutil模块.py2") # 压缩文件 支持的格式 zip 和tar
shutil.make_archive("shutil模块",
"zip",
r"D:\脱产5期内容\day19", #root_dir 仅仅压缩指定路径下的内容
"D:\脱产5期内容\day19\这是压缩后的文件") # # 解压缩
# shutil.unpack_archive(r"shutil模块.zip",
# r"D:\脱产5期内容\day19\shutil模块\解压的文件夹",
# r"zip") # 总结: shutil模块在 copy文件 压缩文件时 使用
os模块、os.path模块、shutil模块、configparser模块、subprocess模块的更多相关文章
- configparser、subprocess模块
一.configparser模块 该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值). 1.创建文件 一般软件的常见文档 ...
- 【python】-- json & pickle、xml、requests、hashlib、shelve、shutil、configparser、subprocess
json & pickle Python中用于序列化的两个模块 json 用于[字符串]和 [python基本数据类型] 间进行转换 pickle 用于[python特有的类型] ...
- os模块,os.path模块,subprocess模块,configparser模块,shutil模块
1.os模块 os表示操作系统该模块主要用来处理与操作系统相关的操作最常用的文件操作打开 读入 写入 删除 复制 重命名 os.getcwd() 获取当前执行文件所在的文件夹路径os.chdir(&q ...
- Python常用模块(logging&re&时间&random&os&sys&shutil&序列化&configparser&&hashlib)
一. logging(日志模块) 二 .re模块 三. 时间模块 四. random模块 五. os模块 六. sys模块 七. shutil模块 八. 序列化模块(json&pickle&a ...
- python---基础知识回顾(四)(模块sys,os,random,hashlib,re,序列化json和pickle,xml,shutil,configparser,logging,datetime和time,其他)
前提:dir,__all__,help,__doc__,__file__ dir:可以用来查看模块中的所有特性(函数,类,变量等) >>> import copy >>& ...
- PYDay10&11&12&13-常用模块:time|datetime|os|sys|pickle|json|xml|shutil|logging|paramiko、configparser、字符串格式化、py自动全局变量、生成器迭代器
1.py文件自动创建的全局变量 print(vars()) 返回值:{'__name__': '__main__', '__package__': None, '__loader__': <_f ...
- python基础-7.3模块 configparser logging subprocess os.system shutil
1. configparser模块 configparser用于处理特定格式的文件,其本质上是利用open来操作文件. 继承至2版本 ConfigParser,实现了更多智能特征,实现更有可预见性,新 ...
- python学习 day19 configparser模块 os模块 subprocess模块
上周五回顾 logging 用于记录日志 四种核心角色: 生成器Logger 过滤器Filter 处理器Handler 格式化处理器 Formatter logging.info.debug 使用默认 ...
- day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime
os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...
随机推荐
- 1709: Fire or Retreat(zzuli)
水题,哎,可是第一次是因为编译错了,vs不知咋了,无奈: 后面几次又因为类型用了int错了,痛苦: 题目描述 在与科技水平远胜于我们的外星人的战斗最后,我们能够用来对外星装甲造成伤害的武器只剩下了…… ...
- CF 833B
互测题T3... 首先有个dp是非常好想的: 设dp[i][j]为前j个数分成i组的最大得分,则易得:dp[i][j]=max{dp[i-1][k-1]+num[k][j]},其中,num[k][j] ...
- C++ Primer 笔记——函数
1.函数内的局部静态对象在程序的执行路径第一次经过对象定义语句的时候初始化,并且直到程序终止才被销毁,在此期间即使对象所在的函数结束执行也不会对它有影响. size_t get_count() { ; ...
- 全局安装的 webpack运行时 报错 Error: Cannot find module 'webpack' ......
全局安装的webpack 安装指令如下 cnpm install wepack -save-dev -g 但是 在我的项目空间运行webpack指令的时候 会报如下错误 为了方便抓取{ Error ...
- ConfigurationManager 类的使用
一.引用 命名空间: System.Configuration程序集: System.Configuration(位于 System.Configuration.dll) 二.示例 1.读取.增 ...
- 滴水穿石-08IO
1.0 File a:构造方法 package d8; import java.io.File; public class FileGouZao { public static void main(S ...
- IEDA序列化设置
- springboot整合Quartz实现动态配置定时任务
前言 在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能. 一.新建一个springboot工程,并添加依赖 & ...
- 秒懂C#通过Emit动态生成代码
首先需要声明一个程序集名称, 1 // specify a new assembly name 2 var assemblyName = new AssemblyName("Kitty&qu ...
- mysql分组(五)
MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT ...