• 第二十一章 configparser、subprocess 、xlrd、xml


    1、confiparser

    1. 什么是配置文件? 什么是配置信息?

      用于编写程序的配置信息的文件;为了提高程序的扩展性

    2. 配置信息的数据要满足两个条件

      1.数据的值不是固定的

      2.可以有用户来指定

    3. 配置文件的格式

      配置文件中只能出现两中数据类型:

      1.section 分区  [‘文件名’]

      2.option 选项  名称=值/  key = value   形式

      注:不能出现重复的分区名;同一个分区下不能有相同的选项名;只可以是任意类型,且字符串不需要加

        引号

    4.

    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、confiparser

    子进程

    什么是进程
    指的是一个正在运行中的程序
    子进程指的是由另个一进程开启的进程 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 模块是用于读取表格数据的 
    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、xml  (全称:可扩展标记语言)

    <tag></tag>  双标签

    <tag/> 但标签 没有文本 一般用于文档结构   例如换行等

    <tr/> 标识换行

    <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.直接遍历某个标签
    返回的是这个标签的所有子标签
     



     
  • 相关阅读:
    Docker部署LAMP项目
    Linux学习4-部署LAMP项目
    Docker环境安装
    Python数据库读写
    Python读取和写入Excel文件数据
    Python读取和写入txt,csv文件数据
    Linux学习1-软件测试从业者的高频Linux命令
    Docker的基础命令
    TurtleBot3 MODEL的相应说明
    ROS2 SLAM(同时定位和地图绘制)
  • 原文地址:https://www.cnblogs.com/sry622/p/10864273.html
Copyright © 2020-2023  润新知