20181210(os,os.path,subprocess,configparser,shutil)
1、os模块
os表示操作系统,该模块主要处理与操作系统相关的操作。最常用的是文件操作:打开,读取,删除,复制,重命名。
重点掌握增删改查的函数操作。
import os
# 获取当前执行文件所在文件夹路径
print(os.getcwd())
输出结果:
C:\Users\wangt\PycharmProjects\new\20181210
# 修改当前的工作目录(将当前文件挪到目标文件夹中)
os.chdir("想要切换到的目标文件夹") #没有返回值
# 获取当前目录的字符串表现方式
print(os.curdir) #(输出结果为.)
# 获取当前目录的父级的字符串表现方式
print(os.pardir) #(输出结果为..)
# 创建多级目录,可以自动创建中间的目录
os.makedirs("a/b/c")
# 输出结果为在当前执行文件夹下新建了三级文件夹
# 只能创建单级目录 会把c1和c2当成已存在的路径
os.mkdir("c1/c2/b3")
# 输出结果为在当前文件夹下的c1/c2文件夹下创建了b3文件夹
# 删除一个文件夹,必须保证文件夹是空的,才能删除
os.rmdir("文件夹名称") # 同级目录直接输文件夹名称,或者输入文件夹路径
# 如果要删除一个不为空的文件夹。思路是先遍历这个文件夹中的所有文件和文件夹,先把里面的内容全部删除,最后再删除文件夹
# 注意遍历删除文件时,listdir得到的是文件名称,需要手动拼接完整路径
path = r"C:\Users\wangt\PycharmProjects\new\20181210\aa" #想要删除的文件夹路径
for f in os.listdir("aa"):
f_path=path+"\\"+f #两个\\,第一个表示转义,相当于拼接出文件的路径
os.remove(f_path)
os.rmdir("aa")
结果是文件夹aa都被删除(aa文件夹与当前执行文件同级)
# 获取文件属性
print(os.stat("test.py"))
# 获取当前的路径分隔符,当程序需要跨平台时,路径不能直接写死,要从os中获取。
print(os.sep)
windows下输出结果为:\
# 获取当前平台使用的换行符
print(os.linesep)
# 执行系统命令
os.system()
例如:os.system("dir")
# 显示当前操作系统的环境变量 (path是pycharm下的环境变量)
print(os.environ)
2、os下path小模块的使用
path是os下的一个小模块,path意为路径,该模块用于处理路径相关问题,通常与os模块一起使用。
之所以用这个模块,是因为python是跨平台的,各平台的路径书写方式不同,所以将所有与路径相关的都进行了封装,使用了path后,程序在跨平台时就不会因为路径问题报错了
# 返回绝对路径,其实就是把当前执行文件所在的文件夹与用户给的参数进行拼接
print(os.path.abspath("test.py"))
输出结果:
C:\Users\wangt\PycharmProjects\new\20181210\test.py
# 将路径分割为文件夹和文件名
print(os.path.split(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))
输出结果: #一个元组,两个元素
('C:\\Users\\wangt\\PycharmProjects\\new\\20181210', 'test0.py') #双反斜杠是为了转义
# 获取路径中的文件名称
print(os.path.basename(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))
输出结果:
test0.py
# 获取路径中的文件夹路径
print(os.path.dirname(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))
输出结果:
C:\Users\wangt\PycharmProjects\new\20181210
# 判断一个文件路径是否存在
print(os.path.exists(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))
输出结果为True或者False
# 判断文件是否是绝对路径,判断依据:第一个字符是不是路径分隔符,如果是则表示是绝对路径
print(os.path.isabs(r"C:\Users\wangt\PycharmProjects\new\20181219"))
输出结果为True或者False
# 判断路径是否是一个文件
print(os.path.isfile(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py")) #输出结果为True或者False
# 判断路径是否是一个文件夹
print(os.path.isdir(r"C:\Users\wangt\PycharmProjects\new\20181210)) #输出结果为True或者False
# 以当前平台的路径分隔符来拼接路径,如果有多个盘符,取最后一个。
print(os.path.join("a","b"))
print(os.path.join("A:\\","B:\\","b")) #A会被忽略
输出结果为:
a\b
B:\b
import os
# 获取项目的根目录
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# 拼接userData的完整路径,为了跨平台,使用os.path来处理路径
USERDATA_PATH = os.path.join(BASE_DIR,"DB","userData")
import sys,os
# 添加环境变量
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
# 导入配置文件
from conf import settings
# 访问配置文件中的用户数据路径
print(settings.USERDATA_PATH)
# 文件或者目录的最后存取时间
print(os.path.getatime(path))
# 文件或者目录的最后修改时间
print(os.path.getmtime(path))
# 返回文件大小
print(os.path.getsize(path)) # 输出结果单位为字节
# 返回规范化路径,大写变成小写,斜杠变成当前平台对应的斜杠等
print(os.path.normcase(r"C:\Users\wangt\PycharmProjects\new\20181210\test0.py"))
# 斜杠转换成当前系统对应的斜杠,同时还可以向上返回,得到上级路径
print(os.path.normpath(r"C:\Users\wangt\PycharmProjects\new\20181210\..")) #单次最多返回两级
print(os.path.normpath(r"C:\Users\wangt\PycharmProjects\new\20181210\..\..")) #向上四级
3、subprocess
subprocess称之为子进程,进程就是一个正在运行的程序,子进程是由另一个程序启动的程序。
使用子进程的目的:当程序自身无法处理某项任务时,需要通过另一个程序来处理,也就是子进程。
os.system在执行系统指令时,也可以命令操作系统启动某个程序。
os.system在执行时,直接把结果输出到了控制台,无法获取执行结果
subprocess不仅可以启动子进程,还能与子进程进行数据交互
当需要在python中启动一个子程序,并且可以进行数据交互时就是用subprocess。如果不需要数据交互,就使用os.system
import subprocess
dir表示要执行的命令
shell表示dir是一个命令
stdout指定输出管道:管道的作用就是把数据传输到另一个进程中,本质上就是读写同一个文件
# 启动一个dir子进程,并将结果输出到指定管道
p = subprocess.Popen("dir",shell=True,stdout=subprocess.PIPE)
print(p.stdout.read()) #stdout输出
# 启动一个tasklist子进程,指定输出结果到管道中
p1=subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)
# 启动一个findstr子进程,将p1进程的结果作为p2进程输入
p2=subprocess.Popen("findstr cmd", #要执行的指令
shell=True, #第一个参数是否是一个指令,这个默认是False。
stdin=p1.stdout, #指定输入管道
stdout=subprocess.PIPE, #指定输出管道
stderr=subprocess.PIPE) #stderr 表示错误管道,当进程执行出错时,可以在错误管道中获取结果。
# 读取p2进程的结果
print(p2.stdout.read())
print(p2.stderr.read().decode("GBK")) #国内win默认GBK
4、configparser 配置解析文件
作为配置信息的数据,要满足两个条件:
1、数据的值是不固定的
2、可以由用户来指定
读取配置信息分为两步:
1、读取某个配置文件
2、调用get()函数
标准配置文件应为configparser文件夹下的.cfg文件。
一份文件可以有多个section分区,分区之间不能重名。
同一个分区下,option也不能重名。
[mysql] # 这是分区,中括号内写分区名字,分区名不能重复
username = jack # 这是一个option(选项)
password = 123 # 所有option左右两端全都会被默认设置成字符串。
lock = true
[django] #这也是分区
import configparser
# 创建一个配置文件解析器
cfg = configparser.ConfigParser()
# 读取名为test.cfg的配置文件
cfg.read("test.cfg",encoding="UTF-8")
# 获取分区
print(cfg.sections())
输出结果为:
['mysql', 'django'] # 得到列表
# 获取某个分区下的某个选项 第一个参数分区名 第二个选项名称
username = cfg.get("mysql","username")
print(username)
print(type(username))
输出结果:
jack
<class 'str'>
password = cfg.get("mysql","password")
print(password)
print(type(password))
print(int(password))
输出结果为:
123
<class 'str'>
123 # 默认都是字符串,想计算就要先修改数据类型
# 改换布尔值
lock = cfg.getboolean("mysql","lock")
print(type(lock))
print(lock)
输出结果为:
<class 'bool'>
True
# 以下三个函数是帮你封装了 类型转换
cfg.getfloat() # 转换成浮点数
cfg.getint() #转换成整数
cfg.getboolean() #转换成布尔值
5、configparser 增删改操作
作为配置文件 最常用的操作就是读取,很少会做修改 总结: read读取配置文件 add_section 添加分区 set 如果没有这个选项则添加 remove_section 删除分区 remove_option 删除选项
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)
# 添加新的分区
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")) # 返回值为布尔值
6、shutil 增删改操作
该模块提供比os模块更加丰富的文件操作功能,如压缩、解压缩、获取文件信息等。
shutil.copyfileobj 拷贝文件 提供两个文件对象 长度表示缓冲区大小
shutil.copyfile(src, dst) 拷贝文件 提供两个文件路径
shutil.copymode() 拷贝文件权限 提供两个文件路径
shutil.copystat(src, dst) 拷贝文件状态信息 最后访问 最后修改 权限 提供两个文件路径
shutil.copy(src, dst) 拷贝文件和权限 提供两个文件路径
shutil.copy2(src, dst) 拷贝文件和状态信息 提供两个文件路径
shutil.ignore_patterns("mp3","*.py") #名字是mp3或者后缀名为.py的就不复制
shutil.copytree(src, dst, symlinks=False, ignore=None) # 拷贝目录(两句联合使用)
symlinks默认False将软连接拷贝为硬链接 否则拷贝为软连接
shutil.rmtree 删除目录 可以设置忽略文件
shutil.move(src, dst) 移动目录和文件
压缩与解压缩:
import shutil
# 压缩文件只支持zip和tar
#压缩, 文件名 格式 需要压缩的文件所在文件夹
shutil.make_archive("压缩测试","zip",r"/Users/jerry/PycharmProjects/备课/常用模块五期") #压缩后的文件放置在与被压缩文件相同的文件夹中
#解压缩 #压缩, 文件名 解压后的文件存放目录
shutil.unpack_archive("压缩测试.zip", #解压文件名
r"/Users/jerry/PycharmProjects/备课/常用模块五期",
r"zip")
20181210(os,os.path,subprocess,configparser,shutil)的更多相关文章
- Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)
Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix) 深度优先搜索的解题详细介绍,点击 给定一个整数矩 ...
- HDU - 4725 (The Shortest Path in Nya Graph)层次网络
题意:有n个点,每个点都在一个层内,层与层之间的距离为c,一个层内的点可以到达与它相邻的前后两个层的点,还有m条小路 ..时间真的是卡的很恶心啊... 借一下别人的思路思路: 这题主要难在建图上,要将 ...
- VueJs(12)---vue-router(导航守卫,路由元信息)
vue-router(导航守卫,路由元信息) 之前泄露两篇有关vue-router博客: VueJs(10)---vue-router(进阶1) VueJs(11)---vue-router(进阶2) ...
- .lib .dll 区别介绍、使用(dll的两种引入方式)
.lib .dll文件都是程序可直接引用的文件,前者就是所谓的库文件,后者是动态链接库(Dynamic Link Library)也是一个库文件.而.pdb则可以理解为符号表文件.DLL(Dynami ...
- os模块、os.path模块、shutil模块、configparser模块、subprocess模块
一.os模块 os指的是操作系统 该模块主要用于处理与操作系统相关的操作,常用的是文件操作(读.写.删.复制.重命名). os.getcwd() 获取当前文件所在的文件夹路径 os.chdir() ...
- Python常用模块(logging&re&时间&random&os&sys&shutil&序列化&configparser&&hashlib)
一. logging(日志模块) 二 .re模块 三. 时间模块 四. random模块 五. os模块 六. sys模块 七. shutil模块 八. 序列化模块(json&pickle&a ...
- 模块简介:(random)(xml,json,pickle,shelve)(time,datetime)(os,sys)(shutil)(pyYamal,configparser)(hashlib)
Random模块: #!/usr/bin/env python #_*_encoding: utf-8_*_ import random print (random.random()) #0.6445 ...
- day16-Python运维开发基础(os / os.path / shutil模块)
1. OS模块与shutil模块 os :新建/删除shutil: 复制/移动 # ### os模块 与 shutil模块 """ os 新建/删除 shutil 复制/ ...
- 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 ...
随机推荐
- 送气球.jpg(模拟)
链接:https://ac.nowcoder.com/acm/contest/318/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- Linux .Net Core
Linux .Net Core自宿主应用程序瘦身记 一,.NET Core 自宿主应用程序个头有点大 发布.NET Core应用程序有两个方式,一种是“便携式”,一种是“自宿主式”.便携式发布时,目标 ...
- 后台任务利器之Hangfire
后台任务利器之Hangfire 一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4 ...
- springboot集成shiro实现验证码校验
github:https://github.com/peterowang/shiro/ 这里实现验证码校验的思路是自己添加一个Filter继承FormAuthenticationFilter,Form ...
- linux-2.6.22.6/Makefile:416: *** mixed implicit and normal rules: deprecated syntax
今天在按照韦东山大哥的教程流程编译内核的时候出现了这个问题 linux-2.6.22.6/Makefile:416: *** mixed implicit and normal rules: ...
- iOS 最新判断机型设备方法
#define isIphoneXXS [UIScreen mainScreen].bounds.size.width == 375 && [UIScreen mainScreen] ...
- GitHub 开启 Two-factor authentication,如何在命令行下更新和上传代码
最近在使用GitHub管理代码,在git命令行管理代码时候遇到一些问题. 如果开起了二次验证(Two-factor authentication两个要素认证),命令行会一直提示输入用户名和密码.查找了 ...
- db2数据库备份
一.离线备份 db2 list database directory -----查看有哪些数据库,确定需要备份哪个数据库 db2 disconnect current -----断开以数据库 ...
- Selenium3+webdriver学习笔记3(xpath方式元素定位)
#!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriver import time,os # about:ad ...
- 挂sqlserver计划,系统自动分配拣货任务
USE [P2WMS_WH43] GO /****** Object: StoredProcedure [dbo].[sp_fru_CalcAllocatePickData] Script Date: ...