01 今日内容大纲
- 递归内容收尾
- shutil模块
- logging模块
02 昨日回顾与作业讲解
- 递归 正则等作业见Pycharm Day 020文件夹--->04 正则递归练习解答.py
03 今日内容
shutil 模块
对文件 文件夹进行操作,查看存储空间与文件大小等等
copy2 复制
# copy2 shutil.copy2('D:python_22Day 020lianjia.html','D:python_22Day 021lianjia_bk.html')
copytree 对整个文件树进行复制
# copytree #将outer1及其中所有文件考入outer2 ignore忽略*后面的格式的文件 shutil.copytree('outer1','outer2',ignore=shutil.ignore_patterns('*.mp4','__init__.py'))
rmtree 强力删除文件或文件夹(别用!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
# # rmtree 强力删除文件或文件夹 (别用!!!!!!!!!!!!!!!!!) # shutil.rmtree(r'D:python_22Day 021lianjia_bk.html')
move 移动文件或文件夹(先copy,后删除原文件)
shutil.move('outer1','outer2',copy_function=shutil.copy2())
disk_usage 获取磁盘使用空间
total, used, free = shutil.disk_usage("C:\") print("當前磁盤共: %iGB,已使用: %iGB,剩餘: %iGB"%(total / 1073741824, used / 1073741824, free / 1073741824))
make_archive 压缩文件
shutil.make_archive('壓縮文件夾的名字', 'zip','待壓縮的文件夾路徑') shutil.make_archive('logging2', 'zip','/Users/jingliyang/PycharmProjects/面試題/常用模塊/隨機數')
unpack_archive 解压文件
shutil.unpack_archive('zip文件的路徑.zip','解壓到目的文件夾路徑') shutil.unpack_archive('/Users/jingliyang/PycharmProjects/面試題/常用模塊/shutil模塊/logging2. zip','/Users/jingliyang/PycharmProjects/面試題/常用模塊/shutil模塊/tmp')
logging 模块
为什么要写log?
- log 是为了排错
- log是用来做数据分析的
例子:
- 购物商城 - 数据库里
- 什么时间买了什么商品
- 把哪些商品加入了购物车了
- 做数据分析的内容 -- 记录到日志
- 一个用户在什么时间什么地点 登录了购物程序
- 搜索了哪些信息,多长时间被显示出来了
- 什么时候关闭了软件
- 对哪些商品点进去看了
- 计算器:
- (1+2)*3/4
- 计算乘法的表达式:
- 记录日志:乘法表达式是什么,结果是什么
- return
- 计算除法
- 记录日志:除法表达式是什么,结果是什么
- return
- 计算小括号内的
- 计算加法
- 计算减法
- 购物商城 - 数据库里
用途:
- 用来记录用户的行为 -- 数据分析
- 用来记录用户的行为 -- 操作审计
- 排查代码中的错误
logging输出的等级:
logging.debug(' debug message') 调试
logging.info('info message') 信息
logging.warning('warning message') 警告
logging.error('error message') 错误
logging.critial('critial message') 批判性的
import logging 输出内容是有等级的 : 默认处理warning级别以上的所有信息 logging.debug('debug message') # 调试 logging.info('info message') # 信息 logging.warning('warning message') # 警告 logging.error('error message') # 错误 logging.critical('critical message') # 批判性的 def cal_mul(exp): exp = 4*6 logging.debug('4*6 = 24') return 24 def cal_div(): pass def cal_add(): pass def cal_sub(exp): exp = 3-24 logging.debug('cal_sub :3-24 = 21') return 21 def cal_inner_bracket(exp2): exp2 = 3-4*6 ret = cal_mul(4*6) exp2 = 3-24 ret = cal_sub(3-24) logging.debug('3-4*6 = -21') return -21 def main(exp): exp =(1+2*(3-4*6))/5 ret = cal_inner_bracket(3-4*6) return ret logging.basicConfig(level=logging.DEBUG) ret = main('(1+2*(3-4))/5') print(ret)
logging的设置:
自己写的时候
同时向文件和屏幕上输出 和 乱码 fh = logging.FileHandler('tmp.log',encoding='utf-8') # fh2 = logging.FileHandler('tmp2.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,fh2] 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') 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,fh2] handlers=[fh,rh,sh] ) for i in range(1,100000): time.sleep(1) logging.error('KeyboardInterrupt error %s'%str(i))