1.  configparser 用于配置解析文件的模块

1.1  为什么需要配置文件?

无论什么样的应用程序,在执行的过程中,都需要很多的参数,而一些参数很多时候都需要修改。

如(QQ文件下载路径,ATM中账号密码输错的次数)如果直接写死在程序中,使用者在需要修改参数时就不得不直接修

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

改源代码,这是非常不合理的,所以我们通常还会把这些需要变化的参数放到配置文件中

 

1.2  对配置文件的格式要求

只能由分区和选项组成即(section和option)

不能由重复的section,同一个section不能有重复的option

所有的数据类型都是字符串

 

1.3  常用方法

1.3.1  read(文件路径,编码)

 

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

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

 

1.3.2  get

# configparser其他用法

c = configparser.ConfigParser()
c.read("atm.cfg",encoding="utf-8")
# 1. 获取所有分区名称
print(c.sections())     # ['mysql', 'mysqld', 'atm', 'atm1']
# 2. 获取莫格分区下所有的option名字
print(c.options("atm"))  # ['err_count']

# 3. 封装了类型转换的方法 getint,getfloat,getboolean
print(type(c.get("mysql","pwd")))     # <class 'str'>
print(type(c.getint("mysql","pwd")))  # <class 'int'>

# 4. 设置某个选项的值,如果option已经存在则覆盖
c.set("atm","err_count","123")

# 5. 添加一个新分区
c.add_section("atm2")
c.set("atm2","test","123")

with open("atm.cfg","wt",encoding="utf-8") as f:
    c.write(f)

# 6. 获取所有的section
print(list(c.keys()))   # ['DEFAULT', 'mysql', 'mysqld', 'atm', 'atm1', 'atm2']

# 7. 获取第二个section的名字
print(list(c.values())[2].name)   # mysqld

# 8. 查看某个对象所有的可能属性
print(dir(list(c.values())[1]))

2.  subprocess(子进程)

子进程指的是由另一个进程开启的进程

为什么开启子进程:当一个程序在运行进程中有一个任务自己做不了或者不想做,就可以开启另一个程序来协助完成任务

 

内存中,每一个进程的内存区域时相互隔离的不能直接访问,所以需要管道来进行通讯

·

import subprocess

# 指定一个输出管道   # 三个管道
stdout = subprocess.PIPE
p = subprocess.Popen("dir",shell = True,stdout = subprocess.PIPE)  # subprocess.PIPE为常量 -1
# 从管道中读取运行结果
result = p.stdout.read().decode("GBK")
# print(result)

# 案例
# tasklist | findstr python  # 先执行tasklist把结果交给findstr来处理
p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)   # shell = True 是一个指令,否则为一个文件
p2 = subprocess.Popen("findstr QQ",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

print(p2.stdout.read())  # b'QQProtect.exe   7120 Services      0     10,216 K\r\nQQ.exe      7184 Console
print(p2.stderr.read())    # b''

 

 

3.  表格处理

3.1  xlrd

xrld是一个第三方的需要自己安装pip install xlrd

xlrd模块是用于读取表格数据的 

用法:

打开文件

wb = xlrd.open_workbook(路径")

获取某个表格

sheet = wb.sheet_by_name()

sheet = wb.sheet_by_index()

获取行数列数

sheet.nrows()

sheet.ncols()

取某行数据

sheet.row_values(行索引)

获取某行的数据

sheet.cell(行,列).value

import xlrd

# 1. 打开文件
workbook = xlrd.open_workbook("123.xlsx")

# 2. 查看所有工作表的名称
print(workbook.sheet_names())    # ['Sheet1', 'Sheet2', 'Sheet3']

# 3. 获取某个工作表
# sheet = workbook.sheet_by_index(1)
sheet = workbook.sheet_by_name("Sheet1")
print(sheet.name)   # Sheet1

# 获取某一行
row = sheet.row(2)
print(row)   # [text:'asd', number:16.0]

# 获取单元格
cell = row[1]
# 单元格的数据类型
print(cell.ctype)   # 2
# 单元格的数据
print(cell.value)   # 16.0

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

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

# 案例 将每个数据提取为python类型
li = []
# 先拿出所有的名称
keys = sheet.row_values(1)
for i in range(2,sheet.nrows):
    print(i)
    # 直接取出所有值
    row = sheet.row_values(i)
    dic = {}
    for k in keys:
        # 每次拿出一个key与一个value一一对应
        dic[k] = row[keys.index(k)]
    li.append(dic)
print(li)   # [{'name': 'asd', 'age': 16.0}, {'name': 'qwe', 'age': 18.0}]

 

3.2  xlwt

 

import xlwt
# 常用方法

#
创建一个工作簿 wb = xlwt.Workbook()
# 创建一个工作表 sheet = wb.add_sheet("456") # type:xlwt.Worksheet # 写入数据 sheet.write_merge(0,0,0,4,"这是标题")
# 将工作簿写入到文件 wb.save("abc.xlsx")
# 案例
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_inder = 2 + data.index(dic)
    for v in values:
        sheet.write(row_inder,values.index(v),v)

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

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄