Python 小栈_15:Python logging、hashlib模块与模块导入

今日所学:

 

一、logging模块

1、logging模块用于写日志


import
logging # logging.basicConfig(level=logging.DEBUG,format="%(asctime)s [%(lineno)d] %(message)s") ''' level可设定从哪个级别开始输出,默认从warning开始;filename可设置输出在一个文本中,默认为在屏幕上显示 filemode可设置文件操作的形式,默认为"a"(追加);format可设定日志的形式,格式为%()s/d ''' logging.debug("hello") logging.info("world") logging.warning("happy") logging.error("not happy") logging.critical("hello world") # 级别从低到高,若没有设置level,则默认从warning开始显示 >>> hello world happy not happy hello world

2、logger对象


import logging

logger=logging.getLogger() #设置一个logger对象 fh=logging.FileHandler("logg.py") #可向文件中发送日志,要输入文件名 ch=logging.StreamHandler() #可向屏幕发送日志 fm=logging.Formatter("%(asctime)s %(message)s") #设置日志格式 fh.setFormatter(fm) #用setFormatter()的方式传输给两个fh和ch ch.setFormatter(fm) logger.setLevel("DEBUG") #设置日志从debug的位置开始输出 logger.addHandler(fh) #在logger对象中添加这两个形式fh和ch,即既可以在文件中输,也可以在屏幕中输 logger.addHandler(ch) logger.debug("hello") logger.info("world") logger.warning("happy") logger.error("not happy") logger.critical("hello world")

注意:Logger是一个树形层级结构,输出信息之前都要获得一个Logger(如果没有显示的获取则自动创建并使用root Logger)

若在root下创建子对象:

import logging

logger1=logging.getLogger("my logger1") #若在getlogger中有参数,则意味着创建的是一个子对象 logger2=logging.getLogger("my logger2") #此时若两个子对象命名相同,则只会按照第二个logger对象显示,表示你已将对象又重新设置了一次 ch=logging.StreamHandler() logger1.setLevel("DEBUG") #给两个对象设置最低的输出级别 logger2.setLevel("DEBUG") logger1.addHandler(ch) #获取两个对象 logger2.addHandler(ch) logger1.debug("hello") logger1.info("world") logger1.warning("happy") logger1.error("not happy") logger1.critical("hello world") logger2.debug("hello") logger2.info("world") logger2.warning("happy") logger2.error("not happy") logger2.critical("hello world") ''' Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical()输出不同级别的日志, 只有日志等级大于或等于设置的日志级别的日志才会被输出。 ''' #注意:在创建一个子对象时,若父对象(root)也有输出的话,则也会向上去寻找,然后再输出一次日志内容 >>> hello world happy not happy hello world hello world happy not happy hello world

 

二、configparser模块

作用:为了配置文件

1、获取对象


import
configparser config=configparser.ConfigParser() #相当于一个空字典 # 往字典中输入内容(以下分别为三种方式) config["DEFAULT"]={"name":"navaeh","age":18} #第一个字典 config["grade"]={} #第二个字典 config["grade"]["all"]="123" config["class"]={} #第三个字典 obj=config["class"] obj["number"]="seven" obj["award"]="the best" with open("example","w") as f: #需写进一个新文件中 config.write(f) #书写方式为config.write(文件句柄)


example文件中的内容 [DEFAULT] name
= navaeh age = 18 [grade] all = 123 [class] number = seven award = the best

2、增删改查



import
configparser
config
=configparser.ConfigParser() #创建一个对象 config.read("example") #先读取文件,再执行查操作 print(config.sections()) #读取块名,默认的default则不会显示 print(config.options("grade")) #显示出grade块下的key值,放在一个列表中。注意,在每个块下会显示出default下的键值对中的key值 print(config.items("grade")) #按照元祖的形式输出grade下的键值对,注意default下的键值对也会输出 print(config.get("grade","all")) #参数为k值,可取多个,用于获取对应的v值。 >>>['grade', 'class'] ['all', 'name', 'age'] [('name', 'navaeh'), ('age', '18'), ('all', '123')] 123



import
configparser config=configparser.ConfigParser() config.add_section("love") config.set("love","k1","1234") config.write(open("example1","w")) #要用这种方式打开文件,进行增加,文件不用关闭 >>> example1文件中 [love] k1 = 1234


config.remove_section("yuan") #删除块名 config.remove_option("yuan","k1") #删除块下的键值对 config.write(open("example","w"))

 

三、hashlib模块

用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法(密文是定长的,32位)

import hashlib

# 主要两种,md5和SHA256
obj=hashlib.md5()
obj.update("happy".encode("utf8"))
print(obj.hexdigest())   #56ab24c15b72a457069c5ea42fcfc640


obj=hashlib.md5("happy".encode("utf8"))  #后面可加严,不易被破解
obj.update("happy".encode("utf8"))
print(obj.hexdigest())

obj=hashlib.md5()
obj.update("happy".encode("utf8"))#若这里同时进行了两部操作,则最终的admin的密文会受到happy的影响
obj.update("admin".encode("utf8"))
print(obj.hexdigest())   #d3b01bc5d3476b6be8976e0f06c25aa8

obj=hashlib.sha256()   #用法类似。
obj.update("happy".encode("utf8"))
print(obj.hexdigest())


>>>

56ab24c15b72a457069c5ea42fcfc640
3bc5ce0db06a0135fc1838293356266c
d3b01bc5d3476b6be8976e0f06c25aa8
489f719cadf919094ddb38e7654de153ac33c02febb5de91e5345cbe372cf4a0

优点:md5只能把明文改为密文,但不能把密文改为明文

缺陷:md5在遇到巨大的数据库,撞库时有可能被反解

 

五、导入模块

1、import的两大作用:

(1)找到相对应的文件路径(文件前的路径永远为执行文件的路径)

(2)执行该文件

2、from  A import B

在调用文件B前加上A,再加上执行文件前部分的绝对路径,即可构成调用文件的正确路径,从而实现调用

 

以上。

posted @ 2020-03-19 17:13  七七)  阅读(224)  评论(0)    收藏  举报