上周五回顾

logging
用于记录日志
四种核心角色:
生成器Logger
过滤器Filter
处理器Handler
格式化处理器 Formatter
logging.info.debug 使用默认配置 配置方式:
1.basicConfig
2.自己创建四种角色 并进行关联
3.用配置文件,字典来配置 logging.config
配置完后
用logging.config.dictConfig(loggin_config.LOGGING_DIC)
aaloger = loger.GetLogger('aa') #找得到配置就配置,找不到就用默认配置 shelve
open 打开文件 类似字典
用于序列化,序列化的中间格式,不能跨平台 sys
跟解释器的相关的操作
argv 获取调用解释器时传递的参数
path 添加环境变量

本周安排 day1 常用模块

1. os ***** 表示操作系统

该模块主要处理与操作系统相关的操作
最常用的是:文件操作
打开 读取 写入 删除 复制 重命名 os.getcwd() 获取当前执行文件所在的文件夹路径
os.chdir() 修改当前的工作目录,相当于命令行的cd
# 获取当前文件夹的字符串表现方式:.
os.curdir
# 获取父文件夹的字符串表现方式:..
os.pardir os.makerdirs('a/b/c') # 可以创建多级目录,如果不存在,可以创建中间的目录 os.mkdir('c/b/a') # 只能创建单级目录,会把c和b当成已存在的路径 os.redir('a') # 删除文件夹必须保证文件夹是空的,才能删除 #如果要删除一个文件夹,而且文件夹不为空,思路是先遍历这个文件夹中的所有文件和文件夹 #要删除的文件路径
path=r'....\a\b\c\d.txt'
先把里面的文件全部删除,然后删除文件夹
for f in os.listdir('c'):
f_path = path+'\\'+f
os.remove(f)
os.remove('c') #注意遍历删除文件时,listdir得到的是文件名称,需要手动拼接完整路径
遍历删除文件夹内所有文件和文件夹
import os
def dele1(s):
if os.path.isdir(s):
for dir in os.listdir(s):
tmp_dir = os.path.join(s, dir)
print(tmp_dir)
if os.listdir(s) != []:
dele1(tmp_dir)
if os.path.isfile(tmp_dir):
os.remove(tmp_dir)
if os.listdir(s) == []:
os.rmdir(s)
dele1(r'/Users/authurchen/脱产5期内容/day19/代码/os模块/a') print(os.stat(文件名)) # 获取文件信息 os.sep # 获取当前系统的路径分隔符,windows:\\,linux:/,当你的程序要跨平台时,路径分隔符不能直接写死,要从os中获取 os.linesep # 返回当前平台的换行符 # 执行系统命令
os.system('dir') os.environ # 获取系统的环境变量,跟解释器的sys.path不一样 # 什么时候使用os:当需要操作文件及文件夹的时候
# 重点放在文件的增删改查

2. os.path *****

path 该模块用于处理路径
之所以有这个模块,是因为python是跨平台的,各平台的路径书写方式不同,所有将所有与路径相关的都进行了封装
使用了path后,你的程序就是跨平台的,不会因为路径产生错误 os.path.abspath('__file__') # 把当前执行文件所在文件夹和后面文件做了拼接 os.path.split('绝对路径') # 将路径分隔为文件夹和文件名 os.path.basename('路径') # 获取路径中的文件名称
os.payh.dirname('路径') # 获取路径中的文件夹路径 os.path.exists('路径') # 判断一个文件路径是否存在,返回布尔值 os.path.isabs('路径') # 判断是否是绝对路径,依据是第一个字符是不是路径分隔符,是则表示绝对路径 os.path.isfile('路径') # 判断路径是否是一个文件,返回布尔值
os.path.isdir('路径') # 判断路径是否一个是文件夹,返回布尔值
#不是一个文件,必然是一个文件夹 os.path.join('路径1','路径2') # 以当前平台的路径分隔符来拼接路径
如果有多个开始的盘符",取的是最后一个
os.path.join('D:\\','A:\\','b') os.path.getatime() #最后存取时间,返回时间戳
os.path.getmtime() # 返回时间戳,最后修改时间
os.path.getsize('文件路径') # 获取文件大小 os.path.normcase('路径') # 返回规范化路径,大写盘符转换成小写,根据当前操作系统做转换 os.path.normpath('路径') # 按当前平台修改路径分隔符的斜杠,并且会执行里面的..,\..\..返回上级目录
总结:主要处理路径,不会关心路径是否存在,只是做拼接,剪切,转换等操作,通常与os模块一起使用
优点:用它处理的路径事可以跨平台的

3. subprocess ***

子进程
进程指的是一个正在运行的程序
子进程是由另一个正在运行的程序 例如qq聊天点击了一个链接,打开了浏览器,那么浏览器就称之为qq的子进程 为什么使用子进程?当我们有一个任务需要处理,而自己的程序无法处理,所有需要开启另一个程序 例如,在pyhton想要获取所有的进程列表信息(os.system('tasklist'))
#os.system 在执行系统指令时,也可以命令操作系统启动某个程序
问题:os.system在执行时有问题,直接把结果输出到控制台,如果想要获取执行的结果,就无能为力了 subprocess 不仅可以启动子进程,还能与子进程进行数据交互 import subprocess
#dir 表示要执行的命令
#shell 表示dir是一个命令
#stdout 指定输出管道
#管道是什么? 相当于生活中的水管,水可以通过管道从一个地方流到另一个地方
在程序中,数据相当于水,管道的作用,就是从一个进程中把数据传输到另一个进程,本质上是在读写同一个文件 p = subproxess.Popen('dir',shell=True,stdout=subprocess.PIPE)
print(p.stdout.read())
# 上面代码是启动了一个子进程,并将结果输出到制定管道 # 启动一个tasklist子进程,指定输出结果到管道中
p1 = subproxess.Popen('tasklist',shell=True,stdout=subprocess.PIPE)
# 启动一个findstr的子进程,将p1进程的结果,作为p2进程的输入
p2 = subproxess.Popen('findstr cmd', # 要执行的指令
shell=True, # 第一个参数是否是一个指令
stdin=p1.stdout,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE) # 表示错误管道,当进程执行出错时,可以在错误管道中获取结果
# 读取p2进程的结果
print(p2.stdout.read())
print(p2.stderr.read().decod('gbk')) # 总结,当你需要在python中启动一个子进程,并且与它进行数据交互时,就使用subprocess,如果不需要数据交互,可以使用os.system

4. configparser ****

配置解析,用来解析配置文件的
何为配置文件?
用于编写程序的配置信息的文件 何为配置信息?
为了提高程序的扩展性,我们会把一些程序中需要用到的值交给用户来确定,比如迅雷的下载目录 配置文件的编写格式 只允许两种数据类型
section(分区),option(选项)
#这是一个section(分区)
[mysql]
#这是一个option(选项)
username = jack # 不用加引号,这里数据都是字符串
password = 123 # 注意:分区名称不能重复
# 同一个分区下,不能有重复option configparser在read的时候,如果文件不存在,会自动创建文件 import configparser
# 创建一个配置文件解析器
cfg = configparser.ConfigParser()
# 读取名为test.cfg的配置文件
ctg.read('test.cfg'.encoding='utf-8') #获取分区
print(cfg.sections()) # 获取某个分区下的某个选项,第一个参数分区名,第二个选项名称
username = cfg.get('mysql','username')
print(username) password = cfg.get('mysql','password')
print(type(password)) # str类型 lock = cfg.getboolean('mysql','lock') # 帮忙转换数据类型
print(type(lock))
# 以下三个函数是帮你封装了类型转换
cfg.getfloat()
cfg.getint()
cfg.getboolean() # 读取配置信息 两步
1.读取某个配置文件
2.调用get函数

config文件的增删改

#修改
cfg = configparser.ConfigParser()
cfg.read('test.cfg',encoding='utf-8') #将mysql分区下的lock改为True
cfg,set('mysql','lock','true')
with open('test.config','wt',encoding='utf-8') as f:
cfg.write(f) #增加新分区
cfg.add_section('新分区')
#增加新选项port,值为3306
cfg,set('mysql','port','3306')
with open('test.config','wt',encoding='utf-8') as f:
cfg.write(f) # 删除分区
cfg.remove_section('新分区')
# 删除某分区的选项
cfg.remove_option('mysql','port') # 作为配置文件,最常用的操作就是读取配置信息,很少会做修改
# 总结:read读取配置文件
add_section 添加分区
set 如果没有这个选项则添加,否则修改
remove_section 删除分区
remove_option 删除选项 cfg.has_section # 判断是否有分区
cfg.has_option # 判断是否有选项

5. shutil模块

shutil是一个工具包,封装了文件高级操作,让你操作起来更方便
功能看起来与os有些重叠,os只能帮你处理文件夹是否存在,路径是否正确,无法直接完成copy等操作 还提供了压缩与解压缩 shutil.ignore_patterns('mp3','*.py') # 忽略mp3和.py后缀文件
shutil.copytree() 拷贝目录 import shutil
shutil.copyfile('源文件路径','目标文件路径') #压缩文件 支持的格式zip和tar
shutil.make_archive('要压缩的文件名','zip','压缩文件放到的路径名')
make_archive中的第四个参数base_dir也是用来指定压缩的路径,与root_dir的区别
#root_dir仅压缩指定路径下的内容
#base_dir 压缩时,会将指定的路径下的内容,与其完整的文件层级一并压缩
#当指定base_dir时,root_dir不生效 shutil.make_archieve('test','zip',root_dir='\day20') shutil.make_archieve('test','zip',root_dir='\day20',base_dir='\day20') #解压文件
shutil.unpack_archive('解压的文件路径','解压到的路径名','zip') shutil实际上调用了zipfile,tarfile模块
import zipfile
import tarfile # 总结:shutil模块 copy文件 压缩文件时使用

day2 ATM+购物车 day3 面向对象基础 day4 面向对象进阶 day5 面向对象高级

python学习 day19 configparser模块 os模块 subprocess模块的更多相关文章

  1. python模块 os&sys&subprocess&hashlib模块

    os模块 # os模块可根据带不带path分为两类 # 不带path print(os.getcwd()) # 得到当前工作目录 print(os.name) # 指定你正在使用的操作系统,windo ...

  2. Python的并发并行[3] -> 进程[0] -> subprocess 模块

    subprocess 模块 0 模块描述 / Module Description From subprocess module: """Subprocesses wit ...

  3. python 学习笔记 13 -- 经常使用的时间模块之time

    Python 没有包括相应日期和时间的内置类型.只是提供了3个相应的模块,能够採用多种表示管理日期和时间值: *    time 模块由底层C库提供与时间相关的函数.它包括一些函数用于获取时钟时间和处 ...

  4. random模块、os模块、序列化模块、sy模块s、subprocess模块

    random随机数模块 random.random( ) 随机产生一个0-1之间的小数 print(random.random()) # 0.31595547439342897 random.rand ...

  5. Python学习【第十二篇】模块(2)

    序列化 1.什么是python序列化? 把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling 序列化就是将python的数据类型转换成字符串 反序列化就是将字符串转换成 ...

  6. Python函数参数&time、OS、json模块

    ##可变参数 PORT = 3306 #常量 def mysql(host,user,password,port,charset,sql,db): print('连接mysql') # mysql(' ...

  7. Python常用模块os & sys & shutil模块

    OS模块 import os ''' os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录: ...

  8. Python学习笔记(十四):模块高级

    以Mark Lutz著的<Python学习手册>为教程,每天花1个小时左右时间学习,争取两周完成. --- 写在前面的话 2013-7-23 21:30 学习笔记 1,包导入是把计算机上的 ...

  9. 【python学习-4】可复用函数与模块

    1.自定义函数 自定义函数格式如下: def <函数名> (参数列表): <函数语句> return <返回值> #!/usr/bin/python # 定义函数, ...

随机推荐

  1. c++官方文档-copy constructor

    #include <iostream> using namespace std; class Example5 { string* ptr; public: Example5(const ...

  2. windows7下搭建robot framework环境指导

    第一步 安装Python并设置环境变量 1.安装python: python下载地址https://www.python.org/,建议用2.7.x版本 2.设置环境变量: 方法如下所示 第二步 安装 ...

  3. 《算法》第二章部分程序 part 4

    ▶ 书中第二章部分程序,加上自己补充的代码,包括优先队列和索引优先队列 ● 优先队列 package package01; import java.util.Comparator; import ja ...

  4. python selenium 三种等待方式详解[转]

    python selenium 三种等待方式详解   引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...

  5. sql server 查看所有表记录数

    SELECT object_name (i.id) TableName, rows as rows FROM sysindexes i INNER JOIN sysObjects o ON (o.id ...

  6. J2SE 8的流库 --- 基本类型流的使用

    展现流的方法 public static <T> void show(String title, Stream<T> stream){ System.out.println(& ...

  7. 企业应用--Nginx&web部署

    一.Nginx介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务. Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler ...

  8. OC代码编译成c++代码 编译器命令

    xcrun -sdk iphoneos clang -arch x86_64 -rewrite-objc Person+Test.m clang -rewrite-objc -fobjc-arc -s ...

  9. Linux命令:unzip

    语法: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] 默认行为将zip文件中的内容全部解压缩到当前目录下. ...

  10. 使用mysqlbinlog恢复指定表

    从整库备份的sql文件中导出某个表的sql语句时,vim查找到表的第一条INSERT语句后,按上下换行键计数INSERT语句的条数,然后按n yy复制,退出vim后,再新建一个文件,按p粘贴刚才的n条 ...