day22(configparser ,subprocess , xlrd ,xlw…

2019-05-16 23:59:31来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

一,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表格的模块

 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) #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基础教程之pymongo库