hashlib模块
hashlib提供了常见的摘要算法,如md5和sha1等等。
那么什么是摘要算法呢?摘要算法又称为哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
注意:摘要算法不是一个解密算法。(摘要算法,检测一个字符串是否发生了变化)
应用:1.做文件校验
2.登录密码
密码不能解密,但可以撞库,用‘加盐’的方法就可以解决撞库的问题。所有以后设置密码的时候要设置的复杂一点。
import hashlib # md5_obj = hashlib.md5() 未加盐 md5_obj = hashlib.md5('luffy'.encode('utf-8')) #加盐后(就让你的密码更牢固了) md5_obj.update('123456'.encode('utf-8')) print(md5_obj.hexdigest()) md5_obj.update('hello'.encode('utf-8')) print(md5_obj.hexdigest()) # ----------- user = 'zorro' password = '123456' md5_obj= hashlib.md5(user.encode('utf-8')) #加盐(哪怕别人的密码和你的密码一样, # 那你加盐以后就只有你的用户名对应的是你的密码了) md5_obj.update(password.encode('utf-8')) print(md5_obj.hexdigest())
import hashlib md5_obj = hashlib.md5() import os filesize = os.path.getsize('filename') #文件大小 f = open('filename','rb') while filesize>0: if filesize > 1024: content = f.read(1024) filesize -= 1024 else: content = f.read(filesize) filesize -= filesize md5_obj.update(content) # for line in f: # md5_obj.update(line.encode('utf-8')) md5_obj.hexdigest() # 文件校验(检测文件改变了没)
logging模块
1. 日志级别
日志一共分成5个等级,从低到高分别是:
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
说明:
- DEBUG:详细的信息,通常只出现在诊断问题上
- INFO:确认一切按预期运行
- WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作。
- ERROR:更严重的问题,软件没能执行一些功能
- CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行
这5个等级,也分别对应5种打日志的方法: debug 、info 、warning 、error 、critical。默认的是WARNING,当在WARNING或之上时才被跟踪。
2. 日志输出
有两种方式记录跟踪,一种输出控制台,另一种是记录到文件中,如日志文件。
2.1、将日志输出到控制台
import logging logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') # 开始使用log logging.info("这是 logging info message") logging.debug("这是 logging debug message") logging.warning("这是 logging warning message") logging.error("这是 logging error message") logging.critical("这是 logging critical message") # 输出结果 # 2019-01-27 10:00:27,896 - 将日志输出控制台.py[line:9] - WARNING: 这是 logging warning message # # # 2019-01-27 10:00:27,896 - 将日志输出控制台.py[line:10] - ERROR: 这是 logging error message # # # 2019-01-27 10:00:27,896 - 将日志输出控制台.py[line:11] - CRITICAL: 这是 logging critical message
说明
通过logging.basicConfig函数对日志的输出格式及方式做相关配置,上面代码设置日志的输出等级是WARNING级别,意思是WARNING级别以上的日志才会输出。另外还制定了日志输出的格式。
注意,只要用过一次log功能再次设置格式时将失效,实际开发中格式肯定不会经常变化,所以刚开始时需要设定好格式
2.2、将日志输出到文件
我们还可以将日志输出到文件,只需要在logging.basicConfig函数中设置好输出文件的文件名和写文件的模式
import logging logging.basicConfig(level=logging.WARNING, filename='log.txt', filemode='w', format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') # 开始使用log logging.info("这是 logging info message") logging.debug("这是 logging debug message") logging.warning("这是 logging warning message") logging.error("这是 logging error message") logging.critical("这是 logging critical message")
2.3、既要把日志输出到控制台, 还要写入日志文件
import logging # 第一步, 创建一个logger logger = logging.getLogger() logger.setLevel(logging.INFO) # log等级总开关 # 第二步,创建一个handler,用于写入日志文件 logfile = 'log.txt' fh = logging.FileHandler(logfile, mode='a', encoding='utf-8') # open的打开模式 fh.setLevel(logging.DEBUG) # 输出到file的log等级的开关 # 第三步, 再创建一个handler,用于输出控制台 ch = logging.StreamHandler() ch.setLevel(logging.WARNING) # 输出到控制台的log等级的开关 # 第四步, 定义handler的输出格式 formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) # 第五步, 将logger添加到handler里面 logger.addHandler(fh) logger.addHandler(ch) # 日志 logging.info("这是 logging info message") logging.debug("这是 logging debug message") logging.warning("这是 logging warning message") logging.error("这是 logging error message") logging.critical("这是 logging critical message")
3、日志格式说明
logging.basicConfig函数中,可以指定日志的输出格式format,这个参数可以输出很多有用的信息,如下: %(levelno)s: 打印日志级别的数值 %(levelname)s: 打印日志级别名称 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0] %(filename)s: 打印当前执行程序名 %(funcName)s: 打印日志的当前函数 %(lineno)d: 打印日志的当前行号 %(asctime)s: 打印日志的时间 %(thread)d: 打印线程ID %(threadName)s: 打印线程名称 %(process)d: 打印进程ID %(message)s: 打印日志信息 在工作中给的常用格式如下: format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s' 这个格式可以输出日志的打印时间,是哪个模块输出的,输出的日志级别是什么,以及输入的日志内容。
原文:http://www.cnblogs.com/haiyan123/p/7382604.html
来源:https://www.cnblogs.com/ForT/p/10325687.html