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 预习内容

原文地址:https://www.cnblogs.com/Redbean1231/p/13436809.html