一、Excel文件处理
xlrd xlwt pandas openpyxl第三方库
安装第三方库openpyxl:
pip install openpyxl
二、openpyxl模块
openpyxl模块三大组件:
1、工作簿 包含多个sheet(工作表)
2、工作表 某个数据包含在某个工作表
3、单元格
import openpyxl
"""
Excel的处理:
1、创建Excel文件
"""
def createExcel():
"""
创建创建Excel文件,并写入数据
:return:
"""
# 创建工作簿
wk=openpyxl.Workbook()
# 获取当前工作表
sheet=wk.active
# 写数据到单元格
sheet.cell(1, 1).value = "username"
sheet.cell(1, 2).value = "class"
sheet.cell(1, 3).value = "adress"
wk.save("userinfo.xlsx")
"""
2、读取Excel文件
"""
def readExcel(filepath):
# 获取工作簿
wk=openpyxl.load_workbook(filepath)
# 方式一:获取工作表
# sheet1=wk.get_sheet_by_name("Sheet")
# 方式二:获取工作表
sheet1=wk["Sheet"]
# 获取单元格坐标
location=(sheet1.cell(5,1))
# 获取单元格值
value=sheet1.cell(5,1).value
print(location,value)
#获取工作表行数及列数
rows=sheet1.max_row
cols=sheet1.max_column
print(f"行数:{rows},列数:{cols}")
datalist=[]
#读取工作表中所有数据?
# 循环excel每一个行
for row in range(1,rows+1):
#循环列数,并取值
for col in range(1,cols+1):
value=sheet1.cell(row,col).value
datalist.append(value)
return datalist
def printDataExcel(filepath):
data=readExcel(filepath)
print(data)
"""
2、编辑Excel文件
1)添加一个新的sheet
2)修改某个单元格数据
"""
def editExcel(filepath):
# 加载工作簿
wk=openpyxl.load_workbook(filepath)
#创建新的工作表
mysheet=wk.create_sheet("mysheet")
mysheet.cell(1,1).value="username"
mysheet.cell(2, 1).value = "DD"
# 编辑后记得保存
wk.save(filepath)
if __name__ == '__main__':
editExcel("userinfo.xlsx")
三、日志收集
1、什么是日志
2、日志作用
3、内置模块 logging
logging的四大组件:
1、日志器 Logger —-> 入口
2、处理器 Handler —-> 执行者 决定日志在不同端进行输出 (日志文件 控制台)
3、格式器 Formatter —-> 日志输入的内容
4、过滤器 Filter —-> 输出感兴趣日志信息,过滤掉不感兴趣的日志信息
关系:1个日志器可以有多个处理器,每个处理器可以各自的格式器及过滤器
4、logging模块的应用
从低到高日志级别:
debug 调试信息
info 关键事件描述
warning 警告信息
error 错误信息
critical 严重错误信息
# 创建日志器
logger = logging.getLogger("logger")
# 日志输出当前级别及以上级别的信息,默认日志输出最低级别是warning
logger.setLevel(logging.INFO)
# 创建控制台处理器‐‐‐‐》输出控制台
SH = logging.StreamHandler()
# 创建文件处理器‐‐‐‐》输出文件
FH = logging.FileHandler("log.txt")
# 日志包含哪些内容 时间 文件 日志级别 :事件描述/问题描述
formatter = logging.Formatter(fmt="[%(asctime)s] [%(filename)s] %(levelname)s :%(message)s",
datefmt='%Y/%m/%d %H:%M:%S')
logger.addHandler(SH)
logger.addHandler(FH)
SH.setFormatter(formatter)
FH.setFormatter(formatter)
try:
score = int(input("请你输入你的成绩"))
if score > 60:
print("恭喜你通过")
else:
print("继续努力")
logging.debug("这是一个debug信息")
logger.info("你查询成绩成功")
logger.warning("这是一个警告信息")
except Exception as error:
logger.error("输入不是数字,错误信息:" + str(error))
logger.critical("这是一个critical信息")
5、重复日志输出的原因
调用一次函数 就会重复添加处理器
解决方案:添加日志器和处理器前做判断是否已经存在
import logging
class FrameLog:
def getLogger(self):
# 创建日志器
logger = logging.getLogger("logger")
# 日志输出当前级别及以上级别的信息,默认日志输出最低级别是warning
if not logger.handlers:
logger.setLevel(logging.INFO)
# 创建控制台处理器‐‐‐‐》输出控制台
SH = logging.StreamHandler()
# 创建文件处理器‐‐‐‐》输出文件
FH = logging.FileHandler("log.txt")
# 日志包含哪些内容 时间 文件 日志级别 :事件描述/问题描述
formatter = logging.Formatter(fmt="[%(asctime)s] [%(filename)s] %(levelname)s :%(message)s",
datefmt='%Y/%m/%d %H:%M:%S')
logger.addHandler(SH)
logger.addHandler(FH)
SH.setFormatter(formatter)
FH.setFormatter(formatter)
return logger
def sum(self,*args):
"""
求多个数之和
:param args:
:return:
"""
try:
sum=0
for num in args:
sum+=num
self.getLogger().info(f"计算多个数之和={sum}")
return sum
except Exception as error:
self.getLogger().error("计算多个数之和有异常:\n"+str(error))
def sum_two(self,x,y):
"""
求两个数之和
:param args:
:return:
"""
try:
sum=0
sum=x+y
self.getLogger().info(f"计算多个数之和={sum}")
return sum
except Exception as error:
self.getLogger().error("计算多个数之和有异常:\n"+str(error))
def sum_three(self,x,y,z):
"""
求两个数之和
:param args:
:return:
"""
try:
sum=0
sum=x+y+z
self.getLogger().info(f"计算多个数之和={sum}")
return sum
except Exception as error:
self.getLogger().error("计算多个数之和有异常:\n"+str(error))
# 常见一个问题
if __name__ == '__main__':
# logger添加一个文件处理器和一个控制台处理器
FrameLog().sum(1, 2, 3)
# logger添加2个文件处理器和2个控制台处理器
FrameLog().sum_two(1, 2)
# logger添加3个文件处理器和3个控制台处理器79 FrameLog().sum_three(1, 2,3)