模块补充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 ——用户输出的消息
学习之旅
原文地址:https://www.cnblogs.com/XiaoYang-sir/p/14725916.html