zoukankan      html  css  js  c++  java
  • 模块补充shutil,logging

    一、shutil:文件目录相关的模块

    • 拷贝文件:copy2

      import shutil
      shutil.copy2('原文件', '现文件')
    • 拷贝目录:copytree

      import shutil
      # 拷贝目录并且不要原目录里面所有py结尾和txt结尾的文件(默认可以不写)
      shutil.copytree('原目录', '新目录', ignore=shutil.ignore_patterns('*.py', '*.txt'))
    • 删除目录:rmtree

      import shutil
      # 删除目录,且不管这个目录是否在使用中,强制删除,(默认为False不强制删除)
      shutil.rmtree('目录', ignore_errors=True)
    • 移动文件或目录:move

      import shutil
      # 也可移动并改名(默认在相对目录下)
      shutil.move('文件', '新目录新文件.txt')
    • 获取磁盘的使用空间:disk_usage

      import shutil
      # '.'点为当前磁盘,可以改成'D\'盘
      total, used, free = shutil.disk_usage('.')
      # 因为获取到的是kb,所以要除以1024的3次方还能获取到GB
      print(f'当前磁盘工:{int(total/1073741824)}GB,已使用:{int(used/1073741824)}GB,剩余:{int(free/1073741824)}GB')
      # 输出
      当前磁盘工:100GB,已使用:65GB,剩余:34GB
    • 压缩文件:make_archive

      impoirt shutil
      shutil.make_archive('被压缩文件夹的名字', 'zip', '压缩后文件夹路径')
    • 解压文件:unpack_archive

      impoirt shutil
      shutil.unpack_archive('zip文件的路径.zip''解压到目的文件夹路径')

       

    二、logging:日志模块

    • 为什么要写log?

      1. 用来记录用户的行为——>数据分析

      2. 用来记录用户的行为——>操作审计

      3. 排查代码中的错误

    • 输出内容是有等级的 : 默认处理warning级别以上的所有信息

      import logging
      # 在写程序的时候要写,但是正常运行的过程中不执行,出现问题在重启打开调试模式,复现报错看日志
      logging.debug('debug 信息')          # 调试——默认不显示
      logging.info('info 信息')            # 信息——默认不显示
      logging.warning('warning 信息')      # 警告
      logging.error('error 信息')          # 错误
      logging.critical('critical 信息')    # 批判性(严重)的
      # 输出
      WARNING:root:warning 信息
      ERROR:root:error 信息
      CRITICAL:root:critical 信息
    • 输出到屏幕

      import logging
      logging.basicConfig(
          # format是设置输出格式
          format='%(asctime)s - %(levelname)s[第%(lineno)d行]-%(module)s:  %(message)s',
          datefmt='%Y-%m-%d %H:%M:%S',   # 设置时间格式
          level=logging.DEBUG            # 设置日志级别,最低显示信息从debug开始(默认从warning)
      )
      logging.debug('debug 信息错误 ')
      logging.info('info 信息错误 ')
      logging.warning('warning 错误信息')
      logging.error('error 错误信息')
      logging.critical('critical 错误信息')
      # 输出
      2021-04-27 21:29:06 - DEBUG[第78行]-6.logging模块:  debug 错误信息
      2021-04-27 21:29:06 - INFO[第79行]-6.logging模块:  info 错误信息
      2021-04-27 21:29:06 - WARNING[第80行]-6.logging模块:  warning 错误信息
      2021-04-27 21:29:06 - ERROR[第81行]-6.logging模块:  error 错误信息
      2021-04-27 21:29:06 - CRITICAL[第82行]-6.logging模块:  critical 错误信息
    • 输出到文件

      import logging
      ​
      fh = logging.FileHandler('tmp.log', encoding='utf-8')   # 创建一个文件处理程序
      log_file = open('log.log', encoding='utf-8', mode='a')  # 日志文件句柄
      logging.basicConfig(
          format='%(asctime)s - %(levelname)s[第%(lineno)d行]-%(module)s:  %(message)s',
          datefmt='%Y-%m-%d %H:%M:%S %p',
          stream=log_file,     # 输出到文件句柄,
          handlers=[fh, ]      # 或者用这个方法将文件处理程序添加进去(只能选一个)
          level=logging.DEBUG
      )
      logging.debug('debug 信息错误 ')
      logging.info('warning 信息错误 ')
      logging.warning('warning 信息错误 ')
      logging.error('error 信息错误 ')
      logging.critical('critical 信息错误 ')
    • 日志切割

      import time
      import logging
      from logging import handlers
      ​
      sh = logging.StreamHandler()            # 在控制台能看见报错信息
      # 按照大小做切割,满了1024kb后就切割下一个文件,最多出现5个文件,超过之后会把最后的那个文件删除
      rh = handlers.RotatingFileHandler('myapp.log', maxBytes=1024, backupCount=5)
      # 按照时间做切割,每个5秒切割一个文件
      fh = handlers.TimedRotatingFileHandler(filename='time.log', when='s', interval=5, encoding='utf-8')
      logging.basicConfig(
          format='%(asctime)s - %(levelname)s[第%(lineno)d行]-%(module)s:  %(message)s',
          datefmt='%Y-%m-%d %H:%M:%S %p',
          level=logging.DEBUG,
          handlers=[fh, rh, sh]           # 将每个设置放入handlers中
      )
      for i in range(1, 100000):
          time.sleep(1)
          logging.error('错误信息 error %s' % str(i))
          
      # 输出
      2021-04-27 22:40:35 PM - ERROR[第177行]-6.logging模块:  错误信息 error 1
      2021-04-27 22:40:36 PM - ERROR[第177行]-6.logging模块:  错误信息 error 2
      2021-04-27 22:40:37 PM - ERROR[第177行]-6.logging模块:  错误信息 error 3
      ....
      ....
    • logging.basicConfig:配置参数

      logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
      ​
      filename:——用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
      filemode:——文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
      format:——指定handler使用的日志显示格式。
      datefmt:——指定日期时间格式。
      level:——设置rootlogger的日志级别
      stream:——用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
      ​
      format参数中可能用到的格式化串:
      %(name)s ——Logger的名字
      %(levelno)s ——数字形式的日志级别
      %(levelname)s ——文本形式的日志级别
      %(pathname)s ——调用日志输出函数的模块的完整路径名,可能没有
      %(filename)s ——调用日志输出函数的模块的文件名
      %(module)s ——调用日志输出函数的模块名
      %(funcName)s ——调用日志输出函数的函数名
      %(lineno)d ——调用日志输出函数的语句所在的代码行
      %(created)f ——当前时间,用UNIX标准的表示时间的浮 点数表示
      %(relativeCreated)d ——输出日志信息时的,自Logger创建以 来的毫秒数
      %(asctime)s ——字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
      %(thread)d ——线程ID。可能没有
      %(threadName)s ——线程名。可能没有
      %(process)d ——进程ID。可能没有
      %(message)s ——用户输出的消息
    学习之旅
  • 相关阅读:
    java练习按要求编写Java程序:
    java基础练习编写2个接口
    java基础练习 给定一个正整数m,统计m的位数,分别打印每一位数字,再按照逆序打印出各位数字。
    java泛型(转)
    Java程序设计上机作业1
    java基础练习继承
    java冒泡排序
    java基础作业
    java 加深了解
    java基本代码的解释
  • 原文地址:https://www.cnblogs.com/XiaoYang-sir/p/14725916.html
Copyright © 2011-2022 走看看