zoukankan      html  css  js  c++  java
  • python22 1.configparser(解析配置)模块 2.subprocess(子进程)模块 3.表格处理 1).xlrd读取数据 2).xlwd生成表格

    今日内容

    1.configparser(解析配置)模块
    2.subprocess(子进程)模块
    3表格处理
    1)xlrd读取数据
    2)xlwd生成表格
    """
    1.configparser模块
    1.1是什么:
    用于解析配置文件的模块

    1.2配置文件的定义:
    用于编写保存某个软件或是某个系统的 一系列参数的文件
    设置 参数
    1.3为什么需要配置文件
    无论是什么样软件应用程序 在执行的过程中 都需要很多的参数而一些参数经常会需要修改

    #案例
    例如: qq里面的下载路径 ATM中的错误次数
    如果直接写死在程序中,使用者在需要修改参数时 就不得不直接修改源代码
    这是非常不合理的,所以我们通常还会吧这些需要变化的参数 放到配置文件中
    """
    1.4.1#正常
    # 打开配置文件来读取参数
    # with open("atm.cfg","rt") as f:
    # err_count = int(f.read())
    # err_count = 0

    1.4.2#使用configparser
    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))

    temp_count = 0
    while True:
    if temp_count >= count:
    print("该账户以及被锁定!")
    break
    name = input("useranme:")
    pwd = input("password:")
    if name == "jerry" and pwd == "123":
    print("登录成功!")
    break
    else:
    print("用户名或密码不正确!")
    temp_count += 1


    1.4.3#configparser的其他方法
    import configparser

    c = configparser.ConfigParser()
    c.read("atm.cfg",encoding="utf-8")

    # 获取所有分区名称
    print(c.sections())
    # 某个分区下所有option名字
    print(c.options("atm"))

    # 封装了类型转换的方法
    # count = c.getint("atm","err_count")
    # c.getfloat()
    # c.getboolean()

    # c.set("atm","test","123")# 设置某个选项的值 如果option以及存在则覆盖
    # c.add_section("atm1") # 添加一个新分区
    # c.set("atm1","test","123")

    print(list(c.keys()))
    # print(list(c.values())[1].name)
    print(list(c.values()))
    # dir 可以查看 某个对象所有可用的属性 __开头不要管 系统自带的
    print(dir(list(c.values())[1]))

    # 写入数据到文件
    with open("atm.cfg","wt",encoding="utf-8") as f:
    c.write(f)


    1.4.4#"代码生成配置文件"


    "了解   一般用户来写 程序来读"

    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)
    """

    1.5小结
    configparser 用来解析配置文件的
    对配置文件有各式要求
    只能由分区和选项
    section 和 option
    同一个section' 不能有重复的option
    不能有重复的section
    不区分数据类型 都是字符串
    # 可以用来注释
    任何option都必须包含在section

    1.6.需要掌握的方法
    read(文件路径,编码)
    get(分区名称,选项名称) 返回的是字符串
    getint getfloat getboolean

    1.7.练习 记住密码的功能
    用配置文件记录用户名和密码 如果说配置文件中存在用户名和密码则直接读取并登陆成功!
    否则用户输入用户名密码 登录成功时 写入配置文件
    '''
    """
    2.subprocess
    子进程
    2.1什么是进程
    指的是一个正在运行中的程序
    子进程指的是由另个一进程开启的进程 a在运行过程中 开启了b b就是a的子进程
    2.2为什么要开启子进程
    当一个程序在运行过程中有一个任务,自己做不了或是不想做 就可以开启另一个进程来帮助其完成任务
    例如 qq中收到一个链接 点击链接 就开启了; 浏览器 浏览器就是qq的子进程

    2.3可以理解为用于执行系统指令的模块

    """
    2.4.1#子进程的应用
    import subprocess
    import os
    # os.system("dir")

    # 内存中 每个进程的内存区域是相互隔离的不能直接访问 所以需要管道来通讯
    # stdout=subprocess.PIPE就是指定了一个输出管道
    # p = subprocess.Popen("dir",shell=True,stdout=subprocess.PIPE)
    # # 从管道中读取出执行结果
    # reuslt = p.stdout.read().decode("GBK")

    2.4.2# 三个管道
    # p1 = subprocess.Popen("dirs",shell=True,stdout=subprocess.PIPE,stderr=-1)
    # print(p1.stdout.read())
    # print(p1.stderr.read().decode("GBK"))

    2.4.3# 案例:
    # 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())

    2.4.4# CMDB 需要收集服务器的信息 比如内存信息

    2.5小结

    # subprocess需要掌握的方法
    # 参数1 指令
    # 2 是否是一个指令
    # 3 错误输出管道
    # 4 输入管道
    # 5 输出管道
    # p = subprocess.Popen("你的指令或是某个exe",shell=True,stderr=,stdin=,stdout=)
    # # 取出管道中的数据
    # p.stderr.read()
    # p.stdout.read()
    # # 将输入写入管道 交给对方进程
    # p.stdin.write(p.stdout.read())

    # 当你需要执行系统指令时 你需要想起它

    '''
    3.表格处理:

    3.1.#读取数据
    import xlrd

    workbook = xlrd.open_workbook("机密数据.xlsx")
    #查看所有工作表的名称
    print(workbook.sheet_names())

    # 获取某个工作表
    # sheet = workbook.sheet_by_index(1)
    sheet = workbook.sheet_by_name("Sheet1")
    # print(sheet.name)
    #
    # # 获取某一行
    row = sheet.row(2)
    # print(row)
    #
    #
    # # 获取单元格
    cell = row[4]
    # print(cell.ctype) # 单元格的数据类型
    # print(cell.value)# 单元格的数据
    #
    # # 转换日期类型
    print(str(xlrd.xldate_as_datetime(cell.value,0)))

    # 获取表格的列数
    # print(sheet.ncols)
    # # 获取表格的行数
    # print(sheet.nrows)

    # 获取第一行的单元格个数
    # print(sheet.row_len(1))

    # 某个单元格数据
    print(sheet.cell(0,0))

    # 将数据读取出来变成python的数据类型 [{},{},{}]

    3.1.1# 案例 将边个数据提取为python数据类型
    # 最后的列表
    li = []
    # 先拿出所有的列名称
    keys = sheet.row_values(1)
    for i in range(2,sheet.nrows):
    print(i)
    # row = sheet.row(i)
    # 直接取出所有值
    row = sheet.row_values(i)
    # 创建一个空字典
    dic = {}
    for k in keys:
    # 每次拿出一个key 与一个value 一一对应
    dic[k] = row[keys.index(k)]
    if k == "生日":
    # 如果是生日字段 需要转换时间类型
    dic[k] = str(xlrd.xldate_as_datetime(row[keys.index(k)],0))
    li.append(dic)
    print(li)

    """
    3.1.2import 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


    3.2.#生成表格
    import xlwt
    """
    xlwt 是第三方的用于生成一个Exel表格

    """
    # 创建一个工作薄
    wb = xlwt.Workbook()
    # 创建一个工作表
    sheet = wb.add_sheet("特工信息") # type:xlwt.Worksheet

    # 字体对象
    font = xlwt.Font()
    font.bold = True

    # style样式对象
    style = xlwt.XFStyle()
    style.font = font # 将字体设置到样式中

    # 写入数据
    # sheet.write(0,0,"这是标题")
    # 写入 并合并单元格
    sheet.write_merge(0,0,0,4,"这是标题",style)

    # 将工作薄写入到文件
    wb.save("abc.xls")








    3.2.2"将数据写入到表格中"
    import xlwt

    data = [{'name': '哈利波特', '代号': 1.0, 'gender': 'man', 'age': 18.0, '生日': '2001-01-01 00:00:00'}, {'name': 'owen', '代号': 748.0, 'gender': 'woman', 'age': 68.0, '生日': '1950-01-01 00:00:00'}, {'name': 'jerry', '代号': 168.0, 'gender': 'man', 'age': 18.0, '生日': '2001-01-01 00:00:00'}]

    wb = xlwt.Workbook()
    sheet = wb.add_sheet("特工信息")

    # 写入标题
    sheet.write_merge(0,0,0,4,"特工信息表")

    # 写入列名称
    keys = data[0].keys()
    i = 0
    for k in keys:
    sheet.write(1,i,k)
    i += 1

    # 写入数据
    for dic in data:
    values = list(dic.values())

    row_index = 2 + data.index(dic)

    for v in values:
    sheet.write(row_index,values.index(v),v)


    # 保存文件
    wb.save("机密数据副本.xls")



    """
    "xlwt用于将数据写入到表格中"
    使用到的几个函数
    1.创建工作薄
    wb = xlwt.Workbook()
    # 2.创建工作表
    sheet = wb.add_sheet("sheet名字")
    # 3.写入数据
    sheet.write(行,列,数据)
    # 4. 保存到文件
    wb.save("路径")

    """
    小结:
    configparser 用于解析配置文件
    配置文件格式 有section 和 option
    [section名称]
    name = value
    c = configparser.Configparser()
    c.read("路径")
    c.get("分区","选项名") 返回字符串

    subprocess
    子进程
    subprocess.Popen(指令,shell=True,in,out,err)
    当你需要执行系统指令时使用它

    表格处理模块
    重点:xlrd 用于读取表格数据

    了解:xlwt 用于生成表格数据

    '''


  • 相关阅读:
    堆排序算法(C#实现)
    在 .NET 2.0 中享受 .NET 3.0的特性
    火花:使用文件管理功能管理我的连接
    我们可以做的更好
    有价值的文章
    网上掏宝
    WPF绑定技术一步步学
    结构类型需要重载GetHashCode和Equals
    关于扩展Visual Studio 2005的相关资料
    插件模型应该考虑的问题
  • 原文地址:https://www.cnblogs.com/llx--20190411/p/10862560.html
Copyright © 2011-2022 走看看