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)
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 区别在于可以在进程间交换数据
一个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))
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")