一、Excel文件处理

xlrd xlwt pandas openpyxl第三方库
安装第三方库openpyxl:
pip install openpyxl

二、openpyxl模块

openpyxl模块三大组件:
1、工作簿 包含多个sheet(工作表)
2、工作表 某个数据包含在某个工作表
3、单元格

  1. import openpyxl
  2. """
  3. Excel的处理:
  4. 1、创建Excel文件
  5. """
  6. def createExcel():
  7. """
  8. 创建创建Excel文件,并写入数据
  9. :return:
  10. """
  11. # 创建工作簿
  12. wk=openpyxl.Workbook()
  13. # 获取当前工作表
  14. sheet=wk.active
  15. # 写数据到单元格
  16. sheet.cell(1, 1).value = "username"
  17. sheet.cell(1, 2).value = "class"
  18. sheet.cell(1, 3).value = "adress"
  19. wk.save("userinfo.xlsx")
  20. """
  21. 2、读取Excel文件
  22. """
  23. def readExcel(filepath):
  24. # 获取工作簿
  25. wk=openpyxl.load_workbook(filepath)
  26. # 方式一:获取工作表
  27. # sheet1=wk.get_sheet_by_name("Sheet")
  28. # 方式二:获取工作表
  29. sheet1=wk["Sheet"]
  30. # 获取单元格坐标
  31. location=(sheet1.cell(5,1))
  32. # 获取单元格值
  33. value=sheet1.cell(5,1).value
  34. print(location,value)
  35. #获取工作表行数及列数
  36. rows=sheet1.max_row
  37. cols=sheet1.max_column
  38. print(f"行数:{rows},列数:{cols}")
  39. datalist=[]
  40. #读取工作表中所有数据?
  41. # 循环excel每一个行
  42. for row in range(1,rows+1):
  43. #循环列数,并取值
  44. for col in range(1,cols+1):
  45. value=sheet1.cell(row,col).value
  46. datalist.append(value)
  47. return datalist
  48. def printDataExcel(filepath):
  49. data=readExcel(filepath)
  50. print(data)
  51. """
  52. 2、编辑Excel文件
  53. 1)添加一个新的sheet
  54. 2)修改某个单元格数据
  55. """
  56. def editExcel(filepath):
  57. # 加载工作簿
  58. wk=openpyxl.load_workbook(filepath)
  59. #创建新的工作表
  60. mysheet=wk.create_sheet("mysheet")
  61. mysheet.cell(1,1).value="username"
  62. mysheet.cell(2, 1).value = "DD"
  63. # 编辑后记得保存
  64. wk.save(filepath)
  65. if __name__ == '__main__':
  66. editExcel("userinfo.xlsx")

三、日志收集

1、什么是日志

日志跟踪软件运行时事件的方法(跟踪器)

2、日志作用

问题定位
信息查询
数据分析

3、内置模块 logging

logging的四大组件:
1、日志器 Logger —-> 入口
2、处理器 Handler —-> 执行者 决定日志在不同端进行输出 (日志文件 控制台)
3、格式器 Formatter —-> 日志输入的内容
4、过滤器 Filter —-> 输出感兴趣日志信息,过滤掉不感兴趣的日志信息
关系:1个日志器可以有多个处理器,每个处理器可以各自的格式器及过滤器

4、logging模块的应用

从低到高日志级别:
debug 调试信息
info 关键事件描述
warning 警告信息
error 错误信息
critical 严重错误信息

  1. # 创建日志器
  2. logger = logging.getLogger("logger")
  3. # 日志输出当前级别及以上级别的信息,默认日志输出最低级别是warning
  4. logger.setLevel(logging.INFO)
  5. # 创建控制台处理器‐‐‐‐》输出控制台
  6. SH = logging.StreamHandler()
  7. # 创建文件处理器‐‐‐‐》输出文件
  8. FH = logging.FileHandler("log.txt")
  9. # 日志包含哪些内容 时间 文件 日志级别 :事件描述/问题描述
  10. formatter = logging.Formatter(fmt="[%(asctime)s] [%(filename)s] %(levelname)s :%(message)s",
  11. datefmt='%Y/%m/%d %H:%M:%S')
  12. logger.addHandler(SH)
  13. logger.addHandler(FH)
  14. SH.setFormatter(formatter)
  15. FH.setFormatter(formatter)
  16. try:
  17. score = int(input("请你输入你的成绩"))
  18. if score > 60:
  19. print("恭喜你通过")
  20. else:
  21. print("继续努力")
  22. logging.debug("这是一个debug信息")
  23. logger.info("你查询成绩成功")
  24. logger.warning("这是一个警告信息")
  25. except Exception as error:
  26. logger.error("输入不是数字,错误信息:" + str(error))
  27. logger.critical("这是一个critical信息")

5、重复日志输出的原因

调用一次函数 就会重复添加处理器
解决方案:添加日志器和处理器前做判断是否已经存在

  1. import logging
  2. class FrameLog:
  3. def getLogger(self):
  4. # 创建日志器
  5. logger = logging.getLogger("logger")
  6. # 日志输出当前级别及以上级别的信息,默认日志输出最低级别是warning
  7. if not logger.handlers:
  8. logger.setLevel(logging.INFO)
  9. # 创建控制台处理器‐‐‐‐》输出控制台
  10. SH = logging.StreamHandler()
  11. # 创建文件处理器‐‐‐‐》输出文件
  12. FH = logging.FileHandler("log.txt")
  13. # 日志包含哪些内容 时间 文件 日志级别 :事件描述/问题描述
  14. formatter = logging.Formatter(fmt="[%(asctime)s] [%(filename)s] %(levelname)s :%(message)s",
  15. datefmt='%Y/%m/%d %H:%M:%S')
  16. logger.addHandler(SH)
  17. logger.addHandler(FH)
  18. SH.setFormatter(formatter)
  19. FH.setFormatter(formatter)
  20. return logger
  21. def sum(self,*args):
  22. """
  23. 求多个数之和
  24. :param args:
  25. :return:
  26. """
  27. try:
  28. sum=0
  29. for num in args:
  30. sum+=num
  31. self.getLogger().info(f"计算多个数之和={sum}")
  32. return sum
  33. except Exception as error:
  34. self.getLogger().error("计算多个数之和有异常:\n"+str(error))
  35. def sum_two(self,x,y):
  36. """
  37. 求两个数之和
  38. :param args:
  39. :return:
  40. """
  41. try:
  42. sum=0
  43. sum=x+y
  44. self.getLogger().info(f"计算多个数之和={sum}")
  45. return sum
  46. except Exception as error:
  47. self.getLogger().error("计算多个数之和有异常:\n"+str(error))
  48. def sum_three(self,x,y,z):
  49. """
  50. 求两个数之和
  51. :param args:
  52. :return:
  53. """
  54. try:
  55. sum=0
  56. sum=x+y+z
  57. self.getLogger().info(f"计算多个数之和={sum}")
  58. return sum
  59. except Exception as error:
  60. self.getLogger().error("计算多个数之和有异常:\n"+str(error))
  61. # 常见一个问题
  62. if __name__ == '__main__':
  63. # logger添加一个文件处理器和一个控制台处理器
  64. FrameLog().sum(1, 2, 3)
  65. # logger添加2个文件处理器和2个控制台处理器
  66. FrameLog().sum_two(1, 2)
  67. # logger添加3个文件处理器和3个控制台处理器79 FrameLog().sum_three(1, 2,3)

作业

作业_excel文件处理及日志处理.txt