• shutil模块+logging模块总结


    shutil模块+logging模块

    shutil模块

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

    shutile.copy

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

      • 拷贝文件和权限
      import shutil
      #使用绝对路径
      shutil.copy(r'D:pycharm软件YZH_pythona.日常Py练习随意文本.txt'     ,r'D:pycharm软件YZH_pythona.日常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_pythona.日常Py练习练习shutil模块', r'D:pycharm软件YZH_pythona.日常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_pythona.日常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_pythona.日常Py练习练习shutil模块', r'D:pycharm软件YZH_pythona.日常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_pythona.日常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_pythona.日常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用户输出的消息
      
  • 相关阅读:
    js下拉列表效果
    js格式化数字/日期
    通用的网页上的播放本地视频文件
    综合
    componentartclientmodeediting
    ESC键
    asp.net/ajax
    转载MS AJAX
    不允许进行远程连接可能会导致此失败 error: 40
    2007.9.17
  • 原文地址:https://www.cnblogs.com/Programmatic-yuan/p/12934667.html
Copyright © 2020-2023  润新知