zoukankan      html  css  js  c++  java
  • day 21

    confiparser

    confiparser,翻译为配置解析,很显然,他是用来解析配置文件的,

    何为配置文件?

    用于编写程序的配置信息的文件

    何为配置信息?

    为了提高程序的扩展性,我们会把一些程序中需要用到的值交给用户来确定,比如迅雷的下载目录,同时下载数,qq的提示音等等,

    作为配置信息的数据 应满足两个条件

    1.数据的值不是固定的

    2.可以由用户来指定的

    例如我们做一个登录功能,为了方便使用我们可以将用户的用户名密码写到配置文件中,可以不需要每次都输入

     

    配置文件编写格式

    在使用该模块前必须要先知道其配置文件的格式,由于读写文件的代码是模块封装好的,所以必须按照固定的方式来边编写,才能被正常解析, 当然并不是只有python有配置文件,其他任何语言都有,但是格式是相同的!

    格式:

    配置文件中只允许出现两种类型的数据

    第一种 section 分区 方括号中是分区的名称 例如:[ATM ]

    第二种 option 选项 名称 = 值

     

    注意:

    不能出现重复的分区名

    同一个分区下不能有相同的选项名

    值可以是任何类型 且字符串不需要加引号

    import configparser
    # 创建 解析对象
    c = configparser.ConfigParser()
    c.read("atm.cfg",encoding="utf-8") # 读取指定的配置文件
    
    # 获取一个配置项
    count = int(c.get("atm","err_count"))
    print(int(count))
    
    
    # print(type(count))
    
    import configparser
    #创建解析对象
    c = configparser.ConfigParser()
    c.read('atm.cfg',encoding='utf-8')   #读取指定的配置文件
    
    
    
    
    # 获取一个配置项
    count = int(c.get('atm','err_count'))
    print(count)

    代码生成配置文件

    一般来说配置文件是由用户来进行写入,开发人员是以读取配置信息为主

    import configparser
    c = configparser.ConfigParser()
    
    c.add_section("test")
    c.set("test","name","jack")
    
    with open("test.cfg","wt",encoding="utf-8") as f:
        c.write(f)
    
    
    
    
        import configparser
        c = configparser.ConfigParser()
    
    
        c.add_section('test')
        c.set('test','name','jack')
    
    with open('test.cfg','wt',encoding='utf-8')as f:
        c.write(f)

    subprocess的使用

    import subprocess

    p = subprocess.Popen("ls",shell=True)
    #shell=True 告诉系统这是一个系统指令 而不是某个文件名
    #此时效果与sys.system()没有任何区别,都是将结果输出到控制台

    # 那如何与这个进程交互数据呢,这需要用到三个参数
    1.stdin  表示输入交给子进程的数据
    2.stdout 表示子进程返回的数据
    3.stderr 表示子进程发送的错误信息

    #这三个参数,的类型都是管道,(管道本质就是一个文件,可以进行读写操作),使用subprocess.PIPE来获取一个管道

    理解了三个参数的意义后让我们来实现一个小功能

    一个子进程执行tasklist命令获取所有的任务信息,然后将结果交给另一个进程进行查找

    另一个子进程执行findstr 查找某个任务信息

    p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)
    p2 = subprocess.Popen("findstr smss",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE)
    print(p2.stdout.read())

    总结: subprocess 主要用于执行系统命令,对比sys.system 区别在于可以在进程间交换数据

    xlrd模块

    是python中一个第三方的用于读取excle表格的模块

    exlce结构分析

    一个excle表格包含多个sheet

    一个sheet中包含多行多列

    每个单元格具备唯一的行号和列号

    常用函数

    import xlrd
    
    # 读取文件
    work_book = xlrd.open_workbook("/Users/jerry/Desktop/公司机密数据.xlsx")
    # 选取一个表
    
    # 获取所有所有表格名称
    print(work_book.sheet_names())
    
    # 选择第2个  索引从0开始
    sheet = work_book.sheet_by_index(1)
    
    # 表格名称
    print(sheet.name)
    
    # 行数
    print(sheet.nrows)
    # 列数
    print(sheet.ncols)
    
    
    #批量读取行数据
    # 取出第6行的全部内容包含数据类型
    print(sheet.row(6))
    # 取出第6行的内容包含数据类型 从第3列开始获取
    print(sheet.row_slice(6,start_colx=3))
    
    # 取出第6行的内容包含数据类型 从第3列开始获取
    print(sheet.row_slice(6,start_colx=4,end_colx=5))
    
    # 获取该行所有数据类型 一数字表示
    # print(sheet.row_types(6))
    # print(sheet.row_values(6))
    
    
    # 单元格的处理
    print(sheet.cell(0,0).value) # 取值
    print(sheet.cell(0,0).ctype) # 取类型
    print(sheet.cell_value(2,0)) # 直接取值
    
    print(sheet.row(0)[0]) # 先取行再取单元格
    print(sheet.col(0)) # 第0列所有数据
    print(sheet.col(0)) # 先取列再取单元格
    
    print(sheet.cell_type(0,0))
    
    # 单元格位置转换
    print(xlrd.cellname(2,1))
    print(xlrd.cellnameabs(0,2))
    print(xlrd.colname(5))
    
    
    # 时间类型转换
    # print(sheet.cell(6,5).value)
    # print(xlrd.xldate_as_datetime(sheet.cell(6,5).value,1))

    xlwt模块

    import xlwt
    # 创建工作簿
    work = xlwt.Workbook()
    # 创建一个表
    sheet = work.add_sheet("员工信息数据")
    
    
    #创建一个字体对象
    font = xlwt.Font()
    font.name = "Times New Roman" # 字体名称
    font.bold = True # 加粗
    font.italic = True # 斜体
    font.underline = True # 下划线
    
    #创建一个样式对象
    style = xlwt.XFStyle()
    style.font = font
    
    
    # 写入标题
    for k in keys:
        sheet.write(0,keys.index(k),k,style)
    
    # 写入数据
    for i in infos:
        for k in keys:
            sheet.write(1 + infos.index(i),keys.index(k),label = i[k])
    # 保存至文件
    work.save("test.xls")
  • 相关阅读:
    Unity3D 事件
    Unity3D 动画回调方法
    Unity3D优化总结
    Unity3D 第一人称控制器 C#脚本
    TCP/IP与IETF的RFC
    linux内核调优参考
    nginx_tcp_proxy代理酸酸乳
    Gitlab+Jenkins实现自动部署
    inotifywait命令详解及安装
    yum无法安装nginx,报错内容为1:nginx-1.14.2-1.el7_4.ngx.x86_64: [Errno 5] [Errno 2] 没有那个文件或目录
  • 原文地址:https://www.cnblogs.com/1624413646hxy/p/10872325.html
Copyright © 2011-2022 走看看