模块configparser/subprocess/表格处理模块

一、configparser模块

解析配置文件,用于编写保存某个如软件或者系统发一些列参数文件,如果写死的程序中,使用者需要修改参数是就不得不修改源代码

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

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

练习 记住密码的功能
用配置文件记录用户名和密码 如果说配置文件中存在用户名和密码则直接读取并登陆成功!
否则用户输入用户名密码 登录成功时 写入配置文件
"""
"""
configparser模块
是什么:
用于解析配置文件的模块

配置文件的定义:
用于编写保存某个软件或是某个系统的 一系列参数的文件
设置 参数
为什么需要配置文件
无论是什么样软件应用程序 在执行的过程中 都需要很多的参数
而一些参数经常会需要修改
例如: qq里面的下载路径 ATM中的错误次数
如果直接写死在程序中,使用者在需要修改参数时 就不得不直接修改源代码
这是非常不合理的,所以我们通常还会吧这些需要变化的参数 放到配置文件中
"""

(1)#导入模块
import configparser
(2)# 创建 解析对象
c = configparser.ConfigParser()
c.read("atm.cfg",encoding="utf-8") # 读取指定的配置文件

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

扩展-------
(1)# 获取所有分区名称
print(c.sections())
或者 print(list(c.keys()))
(2)# 某个分区下所有option名字
print(c.options("atm"))
或者 print(list(c.values()))

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

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

(6)# 写入数据到文件
with open("atm.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

"""
子进程
什么是进程
指的是一个正在运行中的程序
子进程指的是由另个一进程开启的进程 a在运行过程中 开启了b b就是a的子进程
为什么要开启子进程
当一个程序在运行过程中有一个任务,自己做不了或是不想做 就可以开启另一个进程来帮助其完成任务
例如 qq中收到一个链接 点击链接 就开启了; 浏览器 浏览器就是qq的子进程
可以理解为用于执行系统指令的模块
"""
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())
# 当你需要执行系统指令时 你需要想起它

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

# 案例:
# tasklist | findstr QQ # 先执行tasklist 把结果交给 findstr 来处理

p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)
p2 = subprocess.Popen("findstrQQ",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

print(p2.stdout.read())
print(p2.stderr.read())

三、表格处理

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

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

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

(3)# 获取某一行
row = sheet.row(2)
# print(row)

(4)# 获取单元格
cell = row[4]
# print(cell.ctype) # 单元格的数据类型
(5)# 单元格的数据
print(cell.value)
扩展----------
(1)# 转换日期类型
print(str(xlrd.xldate_as_datetime(cell.value,0)))

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

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

(5)# 某个单元格数据
print(sheet.cell(2,1))

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

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

原文地址:https://www.cnblogs.com/huanghongzheng/p/10863472.html