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用户输出的消息