configparser ,subprocess , xlrd ,xlwt 模块
一,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 == '':
- 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','')
- #添加一个新分区,如果分区存在会报错
- 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','')
- #添加
- 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表格的模块
exlce结构分析:
一个excle表格包含多个sheet
一个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) #
- #单元格的数据
- print(cell.value) #张三
- #转换日期类型
- print(str(xlrd.xldate_as_datetime(cell.value,0)))
- #获取表格的列数
- print(sheet.ncols) #
- #获取表格的行数
- print(sheet.nrows) #
- #获取第一行的单元格的个数
- print(sheet.row_len(1)) #
- #某个单元格的数据,索引从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('路径')
- '''
configparser ,subprocess , xlrd ,xlwt 模块的更多相关文章
- hashlib hmac configparser subprocess xlrd xlwt
hashlib模块:加密 import hashlib # 基本使用 cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8')) print(ciphe ...
- Python如何读写Excel文件-使用xlrd/xlwt模块
时间: 2020-08-18 整理: qiyuan 安装和导入 1.模块介绍 在 python 中使用 xlrd/xlwt 和 openpyxl 模块可以对Excel电子表格(xls.xlsx文件)进 ...
- python读写Excel文件的函数--使用xlrd/xlwt
python中读取Excel的模块或者说工具有很多,如以下几种: Packages 文档下载 说明 openpyxl Download | Documentation | Bitbucket The ...
- 自己总结python用xlrd\xlwt读写excel
1.首先安装xlrd\xlwt模块 xlrd模块下载地址: https://pypi.python.org/pypi/xlrd xlwt模块下载地址: https://pypi.python.org/ ...
- 20 常用模块 hashlib hmac:加密 xml xlrd xlwt:excel读|写 configparser subprocess
hashlib模块:加密 加密: 1.有解密的加密方式 2.无解密的加密方式:碰撞检查 hashlib -- 1)不同数据加密后的结果一定不一致 -- 2)相同数据的加密结果一定是一致的 import ...
- hashlib,hmac,subprocess,configparser,xlrd,xlwt,xml模块基本功能
hashlib模块:加密 import hashlib# 基本使用cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8'))print(cipher.h ...
- configparser模块,subprocess 模块,xlrd,xlwt ,xml 模块,面向对象
1. configparser模块 2.subprocess 模块 3.xlrd,xlwt 4.xml 模块 5.面向对象 面向对象是什么? 是一种编程思想,指导你如何更好的编写代码 关注点在对象 具 ...
- Python操作Excel——win32com模块和xlrd+xlwt+xlutils组合
今天,接到一个任务,要生成大约两百个excel文件,从2006年到2013年,每个月两个文件,这些文件中除了几个关于日期的单元格不同外,其他数据都相同,所以就想到可以用python写一个小脚本,自动生 ...
- Python中xlrd和xlwt模块使用方法
本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...
随机推荐
- LuoguP1268树的重量【构造/思维】By cellur925
题目传送门 Description 给你一个矩阵$M$,$M(i,j)$表示$i$到$j$的最短距离.定义树的重量为树上各边权之和,对于任意给出的合法矩阵$M$,已知它所能表示树的重量是唯一确定的.给 ...
- elasticsearch 查询 query
对于 类型是 text的字段,并且分析器指明是ik_max_word的会建立倒排索引 查询的分类: match查询: 会自动转换大小写,会分词, term查询: 不会转换和分词,只能值匹配 term ...
- 关于margin和padding取值为百分比和负值的总结
以下是自己学习过程中的总结,直接上结论: 1.margin/padding取值为百分比: margin和padding四个方向上的取值为百分比都是参照父级元素的宽度来计算的. 2.margin取值为负 ...
- Nginx的location配置概述【转】
语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可.nginx不对url做编码,因此请 ...
- 目标&计划
目标 感觉起来NOIP还是能考到一个比较好的分数的吧 550+? 现在可能还不大行,但是过3个月或许还是能考到的 所以先订下NOIP保底500争取550+吧 至于省选... 前面有一群巨佬挡着,感觉想 ...
- Educational Codeforces Round 19 C
Description Petya recieved a gift of a string s with length up to 105 characters for his birthday. H ...
- JavaScript入门2
5.document对象:Document对象是window对象的一个对象属性,代表浏览器窗口中装载的整个HTML文档.文档中的每个HTML元素对应着JavaScript对象. 因为document代 ...
- 3个解析url的php函数
通过url进行传值,是php中一个传值的重要手段.所以我们要经常对url里面所带的参数进行解析,如果我们知道了url传递参数名称,例如 /index.php?name=tank&sex=1#t ...
- input标签属性
很多时候,我们都用到了很多标签实现输入功能,所以在这里梳理一下. 1.建立一个文本框 <input type="text" name="userName" ...
- mysql5.7.25集群部署和方案设计(附PXC一键部署脚本)
还记得我们之前部署mysql集群有多麻烦嘛?波哥来救你们啦!~ 我已将项目上传到了我的github仓库中,大家可以点击仓库地址出现的连接登录查看相应的代码!如果觉得不错别忘了转发.点赞哦! 部署步骤: ...