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")
  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/1624413646hxy/p/10872325.html
Copyright © 2011-2022 走看看