day22(configparser ,subprocess , xlrd ,xlw…
2019-05-16 23:59:31来源:博客园 阅读 ()
一,configparser模块
''' configparser模块:
是什么: 用于解析配置文件的模块 配置文件的定义: 用于编写保存某个软件或某个系统的一系列参数的文件 设置参数 为什么需要配置文件: 无论是什么样的软件应用程序,在执行过程中,都需要很多的参数 而一些参数经常会需要修改 例如:qq里面的下载路径 ATM中的错误次数 如果直接写死在程序中,使用者在需要修改参数时,就不得不直接修改源代码 这是非常不合理的,所以我们通常还会把这些需要变化的参数提取出来放到配置文件中 ''''' #打开配置文件来读取参数 # with open('atm.cfg','r')as f: # err_count = int(f.read()) # print(err_count,type(err_count)) 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('name:') pwd = input('pwd:') if name == 'owen' and pwd == '123': print('登录成功') break else: print('账号或密码不正确!') temp_count += 1
import configparser # 创建解析对象 c = configparser.ConfigParser() c.read('atm.cfg',encoding='utf-8') #获取所有分区名称 print(c.sections()) #['atm', 'mysql', 'mysqlId'] #某个分区下所有option名字 print(c.options('mysql')) #['name', 'pwd'] #判断某个分区是否存在 print(c.has_section('mysql')) #True #判断某个选项是否存在 print(c.has_option('mysql','name')) #True # 封装了类型转换的方法 count = c.getint('atm','err_count') # c.getboolean() # c.getfloat() print(count,type(count)) #3 <class 'int'> #设置某个选项的值,如果option已经存在则覆盖 c.set('atm','test','666') #添加一个新分区,如果分区存在会报错 c.add_section('atm') print(list(c.keys())) #['DEFAULT', 'atm', 'mysql', 'mysqlId'] print(list(c.values())[1].name) #atm #通过get获取里面的值 print(c.get('atm','test')) print(c.getint('atm','err_count')) print(list(c.values())) #[<Section: DEFAULT>, <Section: atm>, <Section: mysql>, <Section: mysqlId>] #dir 可以查看某个对象所有可用的属性 __开头不要管,系统自带的 print(dir(list(c.values())[1])) #写入数据到文件 with open('atm.cfg','wt',encoding='utf-8')as w: c.write(w) # 创建 解析对象,读取指定的配置文件 c = configparser.ConfigParser() c.read('atm.cfg',encoding='utf-8') # 设置某个选项的值 如果option以及存在则覆盖 c.set('atm1','aaa','111') #添加 c.add_section('ATM_TEST') c.set('ATM_TEST','WWW','HTTPS') #写入数据到文件 with open('atm.cfg','wt',encoding='utf-8')as w: c.write(w)
#代码生成配置文件 import configparser c = configparser.ConfigParser() c.add_section('test') c.set('test','name','jock') with open('test.cfg','wt',encoding='utf-8')as w: c.write(w)
'''
总结:
configparser:用来解析配置文件的
一:对配置文件有格式要求:
1,只能由分区section和选区option
2,不能有重复的section,同一个section,不能有重复的option
3,不区分数据类型,都是字符串
4,任何option都必须包含在section中
二:需要掌握的方法:
read('文件路径','编码')
get('分区名称','选项名称') 返回的是字符串
getint getfloat getboolean
'''
二,subprocess模块
''' subprocess:子进程 1,什么是进程: 指的是一个正在运行中的程序 子进程指的是由另一个进程开启的进程,a在运行过程中开启了b ,b就是a的子进程 2,为什么要开启子进程: 当一个程序在运行过程中有一个任务,自己做不了或是不想做,就可以开启另一个进程来帮助其完成任务 例如:QQ中收到一个链接,点击链接,就开启了浏览器,浏览器就是QQ的子进程 可以理解为用于执行系统指令的模块 ''''' import subprocess import os # os.system('dir') #系统指令 ''' 内存中,每个进程的内存区域是相互隔离的不能直接访问,所以需要管道来通讯 stdout = subprocess.PIPE就是指定了一个输出管道 p = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE) 从管道中读取出执行结果 result = p.stdout.read().decode('GBK')还需要设定编码格式 ''' #三个管道 p1 = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=-1) # winds 默认是GBK,所以需要指定编码格式 print(p1.stdout.read().decode('GBK')) p2 = subprocess.Popen('disr',shell=True,stdout=subprocess.PIPE,stderr=-1) #打印错误信息 print(p1.stderr.read().decode('GBK')) #案例: # tasklist | findstr python #先执行tasklist 把结果交给 findstr来处理 p1 = subprocess.Popen('tasklist',shell=True,stdout=subprocess.PIPE) p2 =subprocess.Popen('findstr python',shell=True,stdin=p1.stdout,stdout=subprocess.PIPE ,stderr=subprocess.PIPE) #打印进程信息 print(p2.stdout.read().decode('GBK')) print(p2.stderr.read().decode('GBK')) ''' 后期项目:CMDB,需要收集服务器的信息,比如内存信息 总结: subprocess 需要掌握的方法: 1,参数 指令 2,是否是一个指令 3,错误输出管道 4,输入管道 5,输出管道 p = subprocess.Popen('你的指令或是某个exe',shell=True,stdout=,stdin=,stderr=) 取出管道中的数据 p.stdout.read().encode() p.stderr.read() 将输入数据写入管道,交给对方进程 p.stdin.write(p.stdout.read()) 当你需要执行系统命令时,你需要想到它 '''
三,xlrd模块
#是python中一个第三方的用于读取excle表格的模块
一个sheet中包含多行多列
每个单元格具备唯一的行号和列号
import xlrd
#读取文件 workbook = xlrd.open_workbook('机密数据.xlsx')
#查看所有工作表的名称 print(workbook.sheet_names()) #['Sheet1', 'Sheet2', 'Sheet3'] #获取某个工作表,索引从0开始 sheet = workbook.sheet_by_index(1)
#表格名称 print(sheet.name) #Sheet2 sheet = workbook.sheet_by_name('Sheet1') print(sheet.name) #Sheet1 #获取某一行 row = sheet.row(2) print(row) #[text:'张三', number:23.0, text:'男', number:180.0, empty:''] #获取单元格 cell = row[0] #单元格的数据类型 print(cell.ctype) #1 #单元格的数据 print(cell.value) #张三 #转换日期类型 print(str(xlrd.xldate_as_datetime(cell.value,0))) #获取表格的列数 print(sheet.ncols) #5 #获取表格的行数 print(sheet.nrows) #6 #获取第一行的单元格的个数 print(sheet.row_len(1)) #5 #某个单元格的数据,索引从0开始 print(sheet.cell(0,0)) #text:'机密数据表' print(sheet.cell(3,0)) #text:'李四' #将数据读取出来变成python的数据类型 [{},{},{}] #案例:将每个数据读取为python数据类型 #最后的列表 li = [] #先拿出所有的列名称 keys = sheet.row_values(1) print(keys) #['姓名', '年龄', '性别', '成绩', '时间'] for i in range(2,sheet.nrows): print(i) row = sheet.row(i) print(row) #[text:'张三', number:23.0, text:'男', number:180.0, text:' 2010/01/01'] #直接取出所有值 row = sheet.row_values(i) print(row) #['张三', 23.0, '男', 180.0, ' 2010/01/01'] #创建一个空字典 dic = {} for k in keys: print(k) #每次拿出一个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) #[{'姓名': '张三', '年龄': 23.0, '性别': '男', '成绩': 180.0, '生日': '2001-01-02 00:00:00'},{.....]
''' 总结: 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_value(行索引) 获取某单元格的数据 sheet.cell(行,列).value '''
常用函数: 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))
四,xlwt模块
是python中一个第三方的用于写入excle数据到表格的模块 ?用代码来编写exlce是非常低效的 所以该模块了解即可。
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")
import xlwt #xlwt 是第三方用于生成一个Exel表格 #1,创建一个工作簿 wb = xlwt.Workbook() #2,创建一个工作表 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')
#将数据写入到表格中 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('路径') '''
原文链接:https://www.cnblogs.com/HZLS/p/10864794.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:第一章 简单测试代码
- python 之 subprocesss 模块、configparser 模块 2019-07-24
- day22-python之模块 2019-05-22
- day22 02 面向对象的交互 2019-05-13
- day22 01 初识面向对象----简单的人狗大战小游戏 2019-05-13
- python开发规范和(configparser、random模块)百日筑基(七 2019-03-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash