当前位置: 移动技术网 > IT编程>脚本编程>Python > hashlib、logging模块

hashlib、logging模块

2019年01月28日  | 移动技术网IT编程  | 我要评论

家的n次方下载,发动机汽缸盖,刘涛演过什么电视剧

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个等级,从低到高分别是:

  1. debug
  2. info
  3. warning
  4. error
  5. 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

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网