hashlib模块和logging模块
hashlib模块:
能够把一个字符串数据类型的变量转换成一个定长的密文的字符串
字符串里的每一个字符都是一个十六进制
对于同一个字符串,不管这个字符串有多长,只要是相同的,
无论在何种环境下,多少次执行,在任何语言中
使用相同的算法、相同的手段得到的结果永远是一样的
只要是不同的字符串,得到的结果一定是不同的
字符串---》密文,密文是不可逆的
user=input('账号:') pwd=input('密码:') md5_obj=hashlib.md5(user.encode('utf-8')) md5_obj.update(pwd.encode('utf-8')) s=md5_obj.hexdigest() print(s)
采用动态加盐的方式进行密码加密
def comparesize(fp1,fp2): import hashlib md5_obj = hashlib.md5() with open(fp1, 'rb') as f: while 1: md5_obj.update(f.read(102400)) if not f.read(102400): break c = md5_obj.hexdigest() md5_obj1 = hashlib.md5() with open(fp2, 'rb') as f: while 1: md5_obj1.update(f.read(102400)) if not f.read(102400): break cc = md5_obj1.hexdigest() if c == cc: return ('ok') else: return ('ng') s=r'G:\homework\Practice\hashlib练习\1.txt' s2=r'G:\homework\Practice\hashlib练习\2.txt' flag=comparesize(s,s2) print(flag)
对于过大的文件夹,可以进行多次update方式后在进行hexdigest运算,不影响结果
logging模块
功能:日志格式的规范、操作的简化、日志的分级管理
logging不能帮你做的事情:
自动生成你要打印的内容
logging模块的使用:
普通配置型 简单的,可订制化差
对象配置型 复杂的,可订制化强
认识日志分级 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) logging.debug('debug message') # 调试模式 logging.info('info message') # 基础信息 logging.warning('warning message') # 警告 logging.error('error message') # 错误 logging.critical('critical message')# 严重错误
根据level决定是否现实debug等级内容
import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='test.log') logging.debug('debug message') # 调试模式 logging.info('info message') # 基础信息 logging.warning('warning message') # 警告 logging.error('error message') # 错误 logging.critical('critical message')# 严重错误
不能够将一个log信息既输出到屏幕又输出到文件
解决办法:
创建一个logger对象的形式来操作文件夹
1、创建一个logger对象
2、创建一个文件管理操作符
3、创建一个屏幕管理操作符
4、创建一个日志输出格式
5、文件管理操作符绑定一个格式
6、屏幕管理操作符绑定一个格式
7、logger对象绑定文件管理操作符
8、logger对象绑定屏幕管理操作符
import logging # 创建一个logger对象 logger = logging.getLogger() # 创建一个文件管理操作符 fh = logging.FileHandler('logger.log',encoding='utf-8') # 创建一个屏幕管理操作符 sh = logging.StreamHandler() # 创建一个日志输出的格式 format1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 文件管理操作符 绑定一个 格式 fh.setFormatter(format1) # 屏幕管理操作符 绑定一个 格式 sh.setFormatter(format1) logger.setLevel(logging.DEBUG) # logger对象 绑定 文件管理操作符 # logger.addHandler(fh) # logger对象 绑定 屏幕管理操作符 logger.addHandler(sh) logger.debug('debug message') # 调试模式 logger.info('我的信息') # 基础信息 logger.warning('warning message') # 警告 logger.error('error message') # 错误 logger.critical('critical message')# 严重错误