一、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).valueprint(location,value)#获取工作表行数及列数rows=sheet1.max_rowcols=sheet1.max_columnprint(f"行数:{rows},列数:{cols}")datalist=[]#读取工作表中所有数据?# 循环excel每一个行for row in range(1,rows+1):#循环列数,并取值for col in range(1,cols+1):value=sheet1.cell(row,col).valuedatalist.append(value)return datalistdef printDataExcel(filepath):data=readExcel(filepath)print(data)"""2、编辑Excel文件1)添加一个新的sheet2)修改某个单元格数据"""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")# 日志输出当前级别及以上级别的信息,默认日志输出最低级别是warninglogger.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 loggingclass FrameLog:def getLogger(self):# 创建日志器logger = logging.getLogger("logger")# 日志输出当前级别及以上级别的信息,默认日志输出最低级别是warningif 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 loggerdef sum(self,*args):"""求多个数之和:param args::return:"""try:sum=0for num in args:sum+=numself.getLogger().info(f"计算多个数之和={sum}")return sumexcept Exception as error:self.getLogger().error("计算多个数之和有异常:\n"+str(error))def sum_two(self,x,y):"""求两个数之和:param args::return:"""try:sum=0sum=x+yself.getLogger().info(f"计算多个数之和={sum}")return sumexcept Exception as error:self.getLogger().error("计算多个数之和有异常:\n"+str(error))def sum_three(self,x,y,z):"""求两个数之和:param args::return:"""try:sum=0sum=x+y+zself.getLogger().info(f"计算多个数之和={sum}")return sumexcept 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)
