configparser模块 subprocess 模块,xlrd 模块(表格处理)
今日内容:
1.configparser模块
2.subprocess模块
3.xlrd(读),xlwt(写) 表格处理
configparser模块
import configparser # configparser 文件的格式
# 后缀为.cfg 内部有section (分区) 与 option(选项)选项也就是数据
# section使用[]包裹,option 是一个类似python中的字典,key 和 value的存在 比如 a = 1,a就是key,value就是1
# 一个文件中不能有同名的section,
# 所有的option必须都必须包含在section中
# 同一个section(分区)内不能出现重名的option(选项)
# cfg文件中没有数据类型的区分,都是以字符串的形式存在,
# 可以使用注释
# # 创建解析对象
c = configparser.ConfigParser()
c.read('test.cfg', encoding='utf-8') # 读取指定的配置文件,第一位传文件路径,第二位为读取编码
# 获取一个配置项
count = int(c.get('atm', 'err_count')) # 刚才已经使用c获取了文件,现在使用get方法获取文件中的值,第一个传section(分区),第二个传option(选项)
print(int(count)) # 打印结果为err_count它的值,3
# # 获取值后就可以使用了
#
# # 案例
temp_count = 0
while True:
if temp_count >= count: # 取出的数据做比较,如果输入次数超次用户就会被冻结
print('该用户已被冻结')
break
name = input('用户名')
pwd = input('密码:')
if name == 'qwe' and pwd == '123':
print('登陆成功')
break
else:
print('用户名或密码不正确')
temp_count += 1 c = configparser.ConfigParser()
c.read('test.cfg', encoding='utf-8') # 获取文件下的所有分区
print(c.sections()) # 直接.出来 c.sections # 获取某个分区下的所有选项名字
print(c.options('abc')) # 必须传入分区名字 # 类型转换方法,因为存放的都是字符串类型,数字类型的必须转换才能使用
c.getint()
c.getfloat()
c.getboolean() # 更改某个选项的值
c.set('def', 'b', '888') # 添加新分区
c.add_section('atm1')
# 在新分区内添加新选项和值
c.set('atm1', 'd', '888')
# 然后使用write 写入文件
with open('test.cfg', 'wt', encoding='utf-8')as f:
c.write(f) # 查看所有分区,文件中有一个默认分区,DEFAULT
print(list(c.keys()))
#
print(list(c.values())) # dir 可以查看某个对象所有可用的属性,__开头的是系统自带的 print(dir(list(c.values())[1])) # ['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] # 案例,在文件中添加section 与 option
import configparser
c = configparser.ConfigParser()
c.read('test.cfg',encoding='utf-8') c.add_section('test5')
c.set('test5','name','jack')
with open('test.cfg','wt',encoding='utf-8') as f:
c.write(f) # 查看文件中有没有section,与option
c.has_section() # 传入 section
c.has_option() # 传入 section 与 option subprocess模块
'''
subprocess子进程
什么是进程:指一个正在运行中的程序
什么是子进程:子进程指的是由另一进程(对应称之为父类)所创建的的进程
为什么要开启进程:当一个程序在运行中有一个任务,自己做不了或者不想做,就可以开启一个进程来帮助其完成任务
例如,QQ中收到一个链接,点击链接就开启了浏览器,浏览器就是QQ的子进程
可以链接为用于执行系统指令的模块
''' import subprocess # 模块作用:可以调用shell命令(系统命令) 也可以调用程序 import os
# os.system 可以使用系统命令
#
# 内存中,每个进程的内存区域是相互隔离的不能直接访问 所以需要管道来通讯
# stdout = subprocess.PIPE # 就是指定了一个输出管道
# # 此处使用系统指令dir
p = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE) # 指定一个管道,第一位放指令或执行程序的绝对路径
# 输入shell=True,是告诉subprocess模块这是一个指令,内部可以传入标准三流,输入(stdin),输出(stdout),错误(stderr)
# # 从管道中读取出执行结果,因为windows是使用GBK编码所以需要对执行结果进行编码
reuslt = p.stdout.read().decode('GBK') # 从管道中取出结果
# print(reuslt) 执行结果,与在windows的cmd命令中执行dir一样 # 三个管道. (标准三流,输入管道,输出管道,错误信息管道)
p1 = subprocess.Popen('dirs', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(p1.stdout.read())
print(p1.stdout.read().decode('GBK')) # 案例:
# 比如 需要把 tasklist 指令处理后的结果交给 findstr 处理
p1 = subprocess.Popen('tasklist',shell=True,stdout=subprocess.PIPE)
p2 = subprocess.Popen('findstr QQ',shell=True,stdin=p1.stdout,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(p1.stdout.read().decode('GBK'))
print(p2.stdout.read().decode('GBK'))
# # subprocess需要掌握的一些方法
# 参数1 指令
# 参数 2 是否是一个指令
# 参数 3 输入管道
# 参数 4 输出管道
# 错误输出管道
p = subprocess.Popen('指令或者某个exe',shell = True,stdin=,stdout=,stderr= )
# 取出管道中的数据
p.stderr.read()
p.stdout.read()
p.stdin.read() # 将输入写入管道,交给对方进程
p.stdin.write(p.stdout.read()) # 当你需要执行系统指令时,需要知道以上的功能方法
表格处理
读取数据:
import xlrd workbook = xlrd.open_workbook("机密数据.xlsx")
#查看所有工作表的名称
print(workbook.sheet_names()) # 获取某个工作表
# sheet = workbook.sheet_by_index(1)
sheet = workbook.sheet_by_name("Sheet1")
# print(sheet.name)
#
# # 获取某一行
row = sheet.row(2)
# print(row)
#
#
# # 获取单元格
cell = row[4]
# 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)) # 某个单元格数据
print(sheet.cell(0,0)) # 将数据读取出来变成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) """
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 xlwt
"""
xlwt 是第三方的用于生成一个Exel表格 """
# 创建一个工作薄
wb = xlwt.Workbook()
# 创建一个工作表
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")
xlwt练习:
# 将数据写入到表格中
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'}] # # 先创建一个excel程序
wb = xlwt.Workbook()
# 再创建一个工作表,文件名叫'信息'
sheet = wb.add_sheet('信息') # 写入标题,合并第0行的4列,并把标题写入
sheet.write_merge(0, 0, 0, 4, '员工信息') # 写入列名称
keys = data[0].keys() # 此处使用data[0].keys 是把data[0]号位(也就是第一个字典)的所有key取出,这里其实是excel中的概括信息那一列,取出来做概括信息 i = 0 # 设置列在文件中的其实位置,0列,从0列开始写
for k in keys: # 循环获取它的每个key
sheet.write(1, i, k) # 此处写入文件中,(1(因为第0行是标题,所以从第1行开始写,i(是列,设置从i 列开始写入,k 是data[0]的所有key)))
i += 1 # 写入数据
for dic in data:
values = list(dic.values()) # 此处是把data中的字典的value取过来,用list装起来 ['哈利波特', 1.0, 'man', 18.0, '2001-01-01 00:00:00']
row_index = 2 + data.index(dic) # 设置写入的数据的位置
for v in values:
sheet.write(row_index,values.index(v),v)
# 参数(起始行,数据,)
wb.save('员工信息副本.xls') # 写入到硬盘
configparser模块 subprocess 模块,xlrd 模块(表格处理)的更多相关文章
- python读写Excel文件--使用xlrd模块读取,xlwt模块写入
一.安装xlrd模块和xlwt模块 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd-0.9. ...
- configparser ,subprocess , xlrd ,xlwt 模块
一,configparser模块 ''' configparser模块: 是什么: 用于解析配置文件的模块 配置文件的定义: 用于编写保存某个软件或某个系统的一系列参数的文件 设置参数 为什么需要配置 ...
- day22 subprocess、configeparser、表格操作模块
今日内容: 1.configparser模块的使用 2.subprocess模块的使用 3.表格处理模块 xlrd模块 xlwt模块 1.configparser模块 configparser模块是用 ...
- Python 第五篇(下):系统标准模块(shutil、logging、shelve、configparser、subprocess、xml、yaml、自定义模块)
目录: shutil logging模块 shelve configparser subprocess xml处理 yaml处理 自定义模块 一,系统标准模块: 1.shutil:是一种高层次的文件操 ...
- python3之xml&ConfigParser&hashlib&Subprocess&logging模块
1.xml模块 XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. XML 被设计用来传输和存储 ...
- os模块、os.path模块、shutil模块、configparser模块、subprocess模块
一.os模块 os指的是操作系统 该模块主要用于处理与操作系统相关的操作,常用的是文件操作(读.写.删.复制.重命名). os.getcwd() 获取当前文件所在的文件夹路径 os.chdir() ...
- os模块,os.path模块,subprocess模块,configparser模块,shutil模块
1.os模块 os表示操作系统该模块主要用来处理与操作系统相关的操作最常用的文件操作打开 读入 写入 删除 复制 重命名 os.getcwd() 获取当前执行文件所在的文件夹路径os.chdir(&q ...
- python操作excel表格文件--使用xlrd模块
原文: http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html 引言: 实际工作中,可能很多情况下都会用到excel表格,像如果不需 ...
- python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则
python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess ...
随机推荐
- python中sys.argv[]用法
sys.argv[]的作用: 在运行python文件的时候往文件里面传递参数. 从函数外部获取到变量值 import sys arg = sys.argv[0] args = sys.argv[:] ...
- for update的作用和用法
一.for update定义 for update是一种行级锁,又叫排它锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它 ...
- Qt实现多国语言(即界面翻译)可实时进行切换
.在工程文件添加 TRANSLATIONS = debug/lang_English.ts \ debug/lang_Chinese.ts .在需要翻译的地方用上tr 例如:setText(tr(&q ...
- poj 3069 贪心+区间问题
Saruman's Army Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5989 Accepted: 3056 De ...
- Tishreen-CPC 2018 G. Colors Overflow(分块)
Problem G. Colors Overflow Input file: standard input Output file: standard output Balloon Color: Da ...
- JavaWeb_(Struts2框架)使用Struts框架实现用户的登陆
JavaWeb_(Struts2框架)使用Servlet实现用户的登陆 传送门 JavaWeb_(Struts2框架)Servlet与Struts区别 传送门 MySQL数据库中存在Gary用户,密码 ...
- Java内存缓存-通过Map定制简单缓存
缓存 在程序中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快.通过缓存,可以高效地重用之前检索或计算的数据. 为什么要用缓 ...
- HLS协议解析
1. 综述 HLS(HTTP Live Streaming) 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些.HLS 协议由三部分组成:HTTP.M3U8.TS.这三部分中,HTT ...
- java编程出现的错误对应的解决方法
error: could not open D:\java\jre1.8\lib\amd64\jvm.cfg 解决方法:把java的环境变量%JAVA_HOME%/bin上移到最上面 优化 查看网页源 ...
- Android热修复技术原理详解
阿里Dexposed -- native解决方案 原理: 直接在native层进行方法的结构体信息对换,从而实现完美的方法新旧替换,从而实现热修复功能 他的思想完全来源于Xposed框架,完美诠释 ...