初学python之路-day22

1.configparser模块

configparser模块
    含义:
        用于解析配置文件的模块

    配置文件的定义:
        用于编写保存某个软件或是某个系统的 一系列参数的文件
        设置 参数
        为什么需要配置文件
        无论是什么样软件应用程序  在执行的过程中 都需要很多的参数
        而一些参数经常会需要修改
        例如: 软件里面的下载路径  ATM中的错误次数
        如果直接写死在程序中,使用者在需要修改参数时 就不得不直接修改源代码
        这是非常不合理的,所以我们通常还会吧这些需要变化的参数 放到配置文件中
configparser 用来解析配置文件的 
对配置文件有各式要求
    只能由分区和选项 
    section 和 option
    同一个section' 不能有重复的option
    不能有重复的section
    不区分数据类型 都是字符串 
    # 可以用来注释 
    任何option都必须包含在section

需要掌握的方法
read(文件路径,编码)
get(分区名称,选项名称) 返回的是字符串 
getint getfloat getboolean  
import configparser
c = configparser.ConfigParser()
c.read("atm.cfg",encoding="utf-8") # 读取指定的配置文件

# 获取一个配置项
count = int(c.get("atm","err_count"))
print(int(count))


c=getint(c.get("atm","err_count"))
print(c)

2.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)

3.subprocess模块

subprocess
子进程

什么是进程
    指的是一个正在运行中的程序
    子进程指的是由另个一进程开启的进程  a在运行过程中 开启了b   b就是a的子进程

为什么要开启子进程
    当一个程序在运行过程中有一个任务,自己做不了或是不想做 就可以开启另一个进
    程来帮助其完成任务
    例如 qq中收到一个链接 点击链接 就开启了; 浏览器  浏览器就是qq的子进程


可以理解为用于执行系统指令的模块
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")

# 三个管道
# 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())

# CMDB 需要收集服务器的信息  比如内存信息
# 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())

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

4.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
# 案例 将边个数据提取为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)

5.xlwt模块

xlwt 是第三方的用于生成一个Exel表格
使用到的几个函数
 1.创建工作薄
wb = xlwt.Workbook()
# 2.创建工作表
sheet =  wb.add_sheet("sheet名字")
# 3.写入数据 
sheet.write(行,列,数据)
# 4. 保存到文件
wb.save("路径")
import xlwt
# 创建一个工作薄
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")

 

点赞