第二十一章 configparser、subprocess 、xlrd、xml
1、
import configparser
#获取解析器对象
config=configparser.ConfigParser()
# 读取某个配置文件
config.read('a.cfg')
#查看所有的分区
res=config.sections() #['section1', 'section2']
print(res)
#查看标题section1下所有key=value的key
options=config.options('section1')
print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']
#查看标题section1下所有key=value的(key,value)格式
item_list=config.items('section1')
print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]
#查看标题section1下user的值=>字符串格式
val=config.get('section1','user')
print(val) #egon
#由于使用前需要进行转换,所以模块封装了转换类型的功能,只需要调用对应的函数即可,如下:
val1=config.getint('section1','age')
val2=config.getboolean('section1','is_admin')
val3=config.getfloat('section1','salary')
#是否存在某选项
print(cfg.has_option("mysql","name"))
#是否存在某分区
print(cfg.has_section("db"))
5.
import configparser
config=configparser.ConfigParser()
config.read('a.cfg',encoding='utf-8')
#删除整个标题section2
config.remove_section('section2')
#删除标题section1下的某个k1和k2
config.remove_option('section1','k1')
config.remove_option('section1','k2')
#判断是否存在某个标题
print(config.has_section('section1'))
#判断标题section1下是否有user
print(config.has_option('section1',''))
#添加一个标题
config.add_section('jack')
#在标题egon下添加name=egon,age=18的配置
config.set('jack','name','egon') # 如果已存则覆盖原来的值
#config.set('jack','age',18) #报错,必须是字符串
#最后将修改的内容写入文件,完成最终的修改
config.write(open('a.cfg','w'))
6.
import configparser
config = configparser.ConfigParser()
config.add_section("setion1")
config.set("setion1","name","zhangsn")
with open("test.config","w") as f:
config.write(f)
2、
子进程
什么是进程
指的是一个正在运行中的程序
子进程指的是由另个一进程开启的进程 a在运行过程中 开启了b b就是a的子进程
为什么要开启子进程
当一个程序在运行过程中有一个任务,自己做不了或是不想做 就可以开启另一个进程来帮助其完成任务
例如 qq中收到一个链接 点击链接 就开启了; 浏览器 浏览器就是qq的子进程
可以理解为用于执行系统指令的模块
三个管道
p1 = subprocess.Popen("dirs",shell=True,stdout=subprocess.PIPE,stderr=-1)
print(p1.stdout.read())
print(p1.stderr.read().decode("GBK"))
案例:
tasklist | findstr python # 先执行tasklist 把结果交给 findstr 来处理
p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)
p2 = subprocess.Popen("findstr QQ",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(p2.stdout.read())
print(p2.stderr.read())
3、
xlrd 模块是用于读取表格数据的
xlrd 是一个第三方的需要自己安装 pip install xlrd
打开文件
wb
wb = xlrd.open_workbook("路径")
# 获取某个表格
sheet = wb.sheet_by_name()
sheet = wb.sheet_by_index()
# 获取行数
sheet.nrows()
# 获取列数
sheet.ncols()
# 取某行数据
sheet.row_values(行索引)
# 获取某单元格的数据
sheet.cell(行,列).value
2、
<tag style="color:red" age="18">12345</tag>
一个标签的完整组成,有三个部分
tag 是标签名称
12345 是文本内容 text
name='jack'是标签的属性
标签的规范:
1.有开始就必须结束
2.所有属性值必须包含在双引号里面
3.只能有一个根标签(最外层只能有一个标签)
4.开始标签和结束标签的顺序是相反的,最先打开谁,就最后关闭谁,最后打开的最先关闭
文档声明可以不写,主要是告诉浏览器,该怎么解析这个文件,xml模块是自带的,不需要安装。
与json的区别
xml是一种可扩展的标记语言
可以高度自定义文档的结构,数据类型,标签的含义等等
扩展性比Json要强
json 更加适用于前后台数据交换,优点:轻量级 跨平台 语法简洁
xml更多用来作为配置文件 当然 python 不太长用,html就是一种xml
import xml.etree.ElementTree as ET
tree = ET.parse("test1.xml") 打开文档,得到一个元素树(xml)
root = tree.getroot() 获取根标签
for tag in root 遍历出 root 标签的所有子标签
for tag in root.iter 遍历出文档中所有的标签
country = root.find("country") 从root 下查找第一个名字为country 的子标签
for tag in root.iter("country") 从root下查找所有名字为country的子孙标签
解析xml得到一个tree对象后 查找标签的4种方式
1.iter()
如果没有参数则查找所有标签
如果有参数则查找所有名字匹配的标签
查找范围 为全文
2.find()
必须给参数
查找当前标签的子标签 返回第一个名字匹配的
3.findall()
必须给参数
查找当前标签的子标签 返回所有名字匹配的
4.直接遍历某个标签
返回的是这个标签的所有子标签