shutil模块+logging模块总结

shutil模块+logging模块

shutil模块

  • shutile模块是一个高级的文件、文件夹以及压缩包处理模块

shutile.copy

  • shutile.copy(src,dst):src为原文件地址,dst为目标文件地址

    • 拷贝文件和权限
    import shutil
    #使用绝对路径
    shutil.copy(r'D:\pycharm软件\YZH_python\a.日常Py练习\随意文本.txt'     ,r'D:\pycharm软件\YZH_python\a.日常Py练习\练习shutil模块')
    
    #使用相对路径
    shutil.copy(r'随意文本.txt',r'随意文件')
    

shutil.copytree

  • shutil.copytree(src, dst, symlinks=False, ignore=None):src为原文件地址,dst为目标文件地址

    • 特别注意:dst文件地址不能是一个已经建立的文件地址,必须是个新的地址
    • 递归地拷贝文件夹
    • ignore=shutil.ignore_patterns("*pattern") :忽略所有pattern型的文件
    • symlinks=False/True:True为建立硬连接(了解即可)
    import shutil
    #使用绝对路径
    shutil.copytree(r'D:\pycharm软件\YZH_python\a.日常Py练习\练习shutil模块', r'D:\pycharm软件\YZH_python\a.日常Py练习\练习shutil模块1' ,ignore=shutil.ignore_patterns('*.mp4','*.pyc'))
    
    #使用相对路径
    shutil.copytree(r'练习shutil模块',r'练习shutil模块1',
    ignore=shutil.ignore_patterns('*.mp4','*.pyc'))	#忽略所有.mp4和.pyc型文件
    

shutil.rmtree

  • shutil.rmtree(path[, ignore_errors[, onerror]])

    • 递归地去删除文件/文件夹(尽量不要用,删了就找不回来了)
    • ignore_errors=True:忽略错误
    import shutil
    #使用绝对路径
    shutil.rmtree(r'D:\pycharm软件\YZH_python\a.日常Py练习\练习shutil模块1',ignore_error=True)
    
    #使用相对路径
    shutil.rmtree(r'练习shutil模块1',ignore_error=True)
    

shutil.move

  • shutil.move(src, dst)

    • 递归的去移动文件
    • 其实就是重命名,相当于文件夹os.rename
    import shutil
    #使用绝对路径
    shutil.move(r'D:\pycharm软件\YZH_python\a.日常Py练习\练习shutil模块', r'D:\pycharm软件\YZH_python\a.日常Py练习\练习shutil模块1')
    
    #使用相对路径
    shutil.move(r'练习shutil模块',r'练习shutil模块1')
    

shutil.disk_usage

  • shutil.disk_usage(path)

    • 获取path磁盘使用情况
    import shutil
    total,used,free=shutil.disk_usage(r"D:\pycharm软件\YZH_python")
    print(f'{total}kb,{used}kb,{free}kb')
    

shutil.make_archive

  • shutil.make_archive(base_name, format,'src_path')

    • basename为压缩包的文件名,也可以是存储压缩包文件路径。只是文件名时,则保存至当前目录,否则保存至指定路径
    • format为压缩文件的格式,如zip,tar等
    • src_path为压缩的文件夹路径,不能是单个文件,可以是空文件夹(不建议使用空文件夹,因为到解压会出现问题,见unpack_archive)
    import shutil
    #使用绝对路径
    shutil.make_archive('随意文本','zip',r'D:\pycharm软件\YZH_python\a.日常Py练习\数据结构与算法\shutil模块练习')
    
    #使用相对路径
    shutil.make_archive('随意文本','zip',r'shutil模块练习')
    
    #basename为压缩包的路径
    shutil.make_archive(r'D:\pycharm软件\YZH_python/随意文本','zip',r'shutil模块练习')
    

shutil.unpack_archive

  • shutil.unpack_archive('format_path','dst_path')

    • 对压缩文件进行解压
    • format_path为压缩文件路径,注意压缩文件不能为空,否则虽然操作可以成功,但是目标文件夹下将不能收到任何文件
    • dst_path:解压到的目标路径(目标文件夹路径)
    import shutil
    shutil.unpack_archive(r'D:\pycharm软件\YZH_python\随意文本.zip',r'D:\pycharm软件\YZH_python\a.日常Py练习\shutil模块练习')
    

logging模块

  • 写日志模块

  • 为什么要写logging(日志)

    • 用来记录用户的行为 ——进行数据分析或操作审计
    • 为了排查代码中的错误
  • 输出内容是有等级的日志级别等级(CRITICAL > ERROR > WARNING > INFO > DEBUG),默认情况下Python的logging模块将日志打印到了标准输出中,且只显示大于等于WARNING级别的日志

    #编辑各个级别输出的内容,如果级别低于自己则输出
    import logging  
    logging.debug('debug message')  
    logging.info('info message')  
    logging.warning('warning message')  
    logging.error('error message')  
    logging.critical('critical message') 
    
    • 可以修改默认级别
    import logging  
    logging.basicConfig(level=logging.DEBUG) #修改默认日志级别DEBUG
    
    import logging
    #同时向文件和屏幕上输出
    fh = logging.FileHandler('tmp.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]
    )
    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')  # 按照时间做切割,5s切一次
    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=[rh,sh]
        handlers=[fh,sh]
    )
    for i in range(1,100000):
        time.sleep(1)
        logging.error('KeyboardInterrupt error %s'%str(i))
    
  • 配置参数

    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用户输出的消息
    
posted @ 2020-05-22 00:59  yyyzh  阅读(120)  评论(0编辑  收藏  举报