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,再加上执行文件前部分的绝对路径,即可构成调用文件的正确路径,从而实现调用
以上。
                    
                
                
            
        
浙公网安备 33010602011771号