• Day 021 shutil模块 logging模块


    01 今日内容大纲

    • 递归内容收尾
    • shutil模块
    • logging模块

    02 昨日回顾与作业讲解

    • 递归 正则等作业见Pycharm Day 020文件夹--->04 正则递归练习解答.py

    03 今日内容

    • shutil 模块

      • 对文件 文件夹进行操作,查看存储空间与文件大小等等

        • copy2 复制

          # copy2
          shutil.copy2('D:python_22Day 020lianjia.html','D:python_22Day 021lianjia_bk.html')
          
        • copytree 对整个文件树进行复制

          # copytree   #将outer1及其中所有文件考入outer2   ignore忽略*后面的格式的文件
          shutil.copytree('outer1','outer2',ignore=shutil.ignore_patterns('*.mp4','__init__.py'))
          
        • rmtree 强力删除文件或文件夹(别用!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)

          # # rmtree 强力删除文件或文件夹   (别用!!!!!!!!!!!!!!!!!)
          # shutil.rmtree(r'D:python_22Day 021lianjia_bk.html')
          
        • move 移动文件或文件夹(先copy,后删除原文件)

          shutil.move('outer1','outer2',copy_function=shutil.copy2())
          
        • disk_usage 获取磁盘使用空间

          total, used, free = shutil.disk_usage("C:\")
          print("當前磁盤共: %iGB,已使用: %iGB,剩餘: %iGB"%(total / 1073741824, used / 1073741824, free / 1073741824))
          
        • make_archive 压缩文件

          shutil.make_archive('壓縮文件夾的名字', 'zip','待壓縮的文件夾路徑')
          shutil.make_archive('logging2', 'zip','/Users/jingliyang/PycharmProjects/面試題/常用模塊/隨機數')
          
        • unpack_archive 解压文件

          shutil.unpack_archive('zip文件的路徑.zip','解壓到目的文件夾路徑')
          shutil.unpack_archive('/Users/jingliyang/PycharmProjects/面試題/常用模塊/shutil模塊/logging2. zip','/Users/jingliyang/PycharmProjects/面試題/常用模塊/shutil模塊/tmp')
          
    • logging 模块

      • 为什么要写log?

        • log 是为了排错
        • log是用来做数据分析的
      • 例子:

        • 购物商城 - 数据库里
          • 什么时间买了什么商品
          • 把哪些商品加入了购物车了
        • 做数据分析的内容 -- 记录到日志
          • 一个用户在什么时间什么地点 登录了购物程序
          • 搜索了哪些信息,多长时间被显示出来了
          • 什么时候关闭了软件
          • 对哪些商品点进去看了
        • 计算器:
          • (1+2)*3/4
          • 计算乘法的表达式:
            • 记录日志:乘法表达式是什么,结果是什么
            • return
          • 计算除法
            • 记录日志:除法表达式是什么,结果是什么
            • return
          • 计算小括号内的
          • 计算加法
          • 计算减法
      • 用途:

        • 用来记录用户的行为 -- 数据分析
        • 用来记录用户的行为 -- 操作审计
        • 排查代码中的错误
      • logging输出的等级:

        1. logging.debug(' debug message') 调试

        2. logging.info('info message') 信息

        3. logging.warning('warning message') 警告

        4. logging.error('error message') 错误

        5. logging.critial('critial message') 批判性的

          import logging
          输出内容是有等级的 : 默认处理warning级别以上的所有信息
          logging.debug('debug message')          # 调试
          logging.info('info message')            # 信息
          logging.warning('warning message')      # 警告
          logging.error('error message')          # 错误
          logging.critical('critical message')    # 批判性的
          
          def cal_mul(exp):
              exp = 4*6
              logging.debug('4*6 = 24')
              return 24
          def cal_div():
              pass
          def cal_add():
              pass
          def cal_sub(exp):
              exp = 3-24
              logging.debug('cal_sub :3-24 = 21')
              return 21
          
          def cal_inner_bracket(exp2):
              exp2 = 3-4*6
              ret = cal_mul(4*6)
              exp2 = 3-24
              ret = cal_sub(3-24)
              logging.debug('3-4*6 = -21')
              return -21
          
          def main(exp):
              exp =(1+2*(3-4*6))/5
              ret = cal_inner_bracket(3-4*6)
              return ret
          
          logging.basicConfig(level=logging.DEBUG)
          ret = main('(1+2*(3-4))/5')
          print(ret)
          
      • logging的设置:

        • 自己写的时候

          同时向文件和屏幕上输出 和 乱码
          fh = logging.FileHandler('tmp.log',encoding='utf-8')
          # fh2 = logging.FileHandler('tmp2.log',encoding='utf-8')
          sh = logging.StreamHandler()
          logging.basicConfig(
              format='%(asctime)s - %(name)s - %(levelname)s[line :%(lineno)d]-%(module)s:  %(message)s',
              datefmt='%Y-%m-%d %H:%M:%S %p',
              level= logging.DEBUG,
              # handlers=[fh,sh,fh2]
              handlers=[fh,sh]
          )
          logging.debug('debug 信息错误 test2')
          logging.info('warning 信息错误 test2')
          logging.warning('warning message test2')
          logging.error('error message test2')
          logging.critical('critical message test2')
          
        • 工作中

          做日志的切分
          import time
          from logging import handlers
          sh = logging.StreamHandler()
          rh = handlers.RotatingFileHandler('myapp.log', maxBytes=1024,backupCount=5)   # 按照大小做切割
          fh = handlers.TimedRotatingFileHandler(filename='x2.log', when='s', interval=5, encoding='utf-8')
          logging.basicConfig(
              format='%(asctime)s - %(name)s - %(levelname)s[line :%(lineno)d]-%(module)s:  %(message)s',
              datefmt='%Y-%m-%d %H:%M:%S %p',
              level= logging.DEBUG,
              # handlers=[fh,sh,fh2]
              handlers=[fh,rh,sh]
          )
          for i in range(1,100000):
              time.sleep(1)
              logging.error('KeyboardInterrupt error %s'%str(i))
          

    04 今日总结

    05 预习内容

  • 相关阅读:
    java基础—GUI编程(一)
    java基础—数组
    java基础—异常处理
    java基础—面向对象
    多线程(二)
    多线程(一)
    ORACLE数据库SQL语句的执行过程
    Jetty直接调试,不用部署,不用弄一些杂七杂八的设置
    (2.1)servlet线程安全问题
    (3)tomcat源代码分析环境的搭建
  • 原文地址:https://www.cnblogs.com/Redbean1231/p/13436809.html
Copyright © 2020-2023  润新知