logging模块:
模块的功能是记录我们软件的各种状态,然后输出到文件中,方便查看维护代码.一般包括debug,infor,warning,error,critical,日志级别.
函数式简单配置:
import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message')
灵活配置日志级别,日志格式,输出位置:
函数形式 手动挡 写入文件后无法读取,而且文件编码形式为gbk,不可更改 import logging logging.basicConfig( level = logging.warning, level = 10, format = '%(asctime)s - %(name)s - [%(lineno)d] - %(message)s', filename = 'test.log', filemode = 'a+', ) logging.debug('我是风啊') #10 logging.info('你是沙') #20 logging.warning('缠缠绵绵到我家') #30 logging.error('疯疯狂狂又一宿') #40 logging.critical('下不来床') #50
自动挡:自己设定一个
import logging logger = logging.getLogger('开发日志') # 获取一个新的日志 formatter = logging.Formatter('%(asctime)s - %(name)s - [%(lineno)d] - %(message)s') #定义了一个模板 ch = logging.StreamHandler() # 流 屏幕流(打印到屏幕) #生成了一个屏幕流 fh = logging.FileHandler('tt.log','a',encoding='utf-8') #文件流 # 生成一个文件流 boss = logging.FileHandler('boss.log','a',encoding='utf-8') #文件流 # 生成一个老板看的日志 boss_formatter = logging.Formatter('%(asctime)s - %(message)s') ch.setFormatter(formatter) # 把咱们定义的模板绑定给咱们的创建的存储日志的流 fh.setFormatter(formatter) boss.setFormatter(boss_formatter) # 自己又写了一个新的模板,然后绑定 logger.setLevel(logging.DEBUG) # 设置咱们日志的记录等级 用新创建的日志来调节记录的等级 logger.addHandler(fh) # 指定要输出的方式 logger.addHandler(ch) #将屏幕流加入咱们的日志绑定 logger.debug('我是风啊') #10 logger.info('你是沙') #20 logger.warning('缠缠绵绵到我家') #30 logger.error('疯疯狂狂又一宿') #40 logger.critical('下不来床') #50
序列化:
什么是序列化?
原本的字典、列表等内容转换成一个字符串的过程就叫做序列化
json模块:
dumps、dump、loads、load
多个语言在通用 序列号: dic = {'1':2,'2':3} dump # 将对象转成字符存储到文件中 load # 将文件中的字符转换对象 loads # 将字符串转换成对象 dumps # 将对象转换字符串 dic = {'name':'meet','age':18} lst = [1,3,45,67,88] f = open('test.txt','w',encoding='utf-8') json.dump(lst,f) f = open('test.txt','r',encoding='utf-8') s = json.load(f) print(type(s),s[-1]) def func(): print(111) lst = [1,2,3,[4,5,6]] s = json.dumps(lst) print(type(s),s) c = json.loads(s) print(type(c),c) import json data = {'username':['李华',[1,2,3],'二愣子'],'sex':'male','age':16} json_dic2 = json.dumps(data,sort_keys=True,ensure_ascii=False,indent=2,separators=(',',':')) print(json_dic2)
pickle模块:
import pickle load,dump loads dumps f = open('test.txt','wb') pickle.load(f) dic = {'1':2,'2':3} pickle.dump(dic,f) f1 = open('test.txt','rb') s = pickle.load(f1) print(type(s),s) dic = {'1':2,'2':3} s = pickle.dumps(dic) # 将对象转换成字节 c = pickle.loads(s) print(type(c),c) def func(): print(111) f1= pickle.dumps(func) i = 1234 ff = pickle.dumps(i) print(ff) pickle.loads(f)() print(pickle.loads(f))
总结:
json: 序列化
将一个对象转换成一个能够永久存储的内容
将一个对象转换成一个字符串的时候 -- > 序列化 --> dumps(要转换的对象) -- >字符串
将一个字符串转换成一个对象的时候 ---> 反序列化 --> loads(要转换的字符串) -->对象
将一个对象转换成一个文件的时候 -- > 序列化 --> dump(要转换的对象,文件句柄) -- >可见文件
将一个文件转换成一个对象的时候 ---> 反序列化 --> load(文件句柄) --> 对象
pickle: 序列化
将一个对象转换成一个能够永久存储的内容
将一个对象转换成一个字节的时候 -- > 序列化 --> dumps(要转换的对象) -- >字节
将一个字节转换成一个对象的时候 ---> 反序列化 --> loads(要转换的字节) -->对象
将一个对象转换成一个文件的时候 -- > 序列化 --> dump(要转换的对象,文件句柄) -- >不可见文件
将一个文件转换成一个对象的时候 ---> 反序列化 --> load(文件句柄) --> 对象
区别:
json 编程语言中是通用的,json转一些简单的数据
pickle python自己的,可以将已知对象转换(lambda除外)
random随机模块:
import random print(chr(random.randrange(65,91)), chr(random.randrange(97,123)), chr(random.randrange(65,91)), chr(random.randrange(65,91))) print(chr(90)) 小数: print(random.random()) #0-1之间的小数 print(random.uniform(1,5)) #1-5之间的小数 print(random.randint(1,36)) # 随机整数 print(random.randrange(1,10,2)) randrange()指定范围 print(random.randrange(0,10,2)) print(lst[random.randrange(len(lst))]) print(random.choice(lst)) # choice(可迭代对象) 只拿一个 print(random.choice(lst),random.choice(lst)) print(random.choices(lst,k=2)) # 可以出现多个,但是容易重复 print(random.sample(lst,k=3)) # 可以出现多个,不会出现重复 lst = [12,3,4,5,6,7] random.shuffle(lst) # 顺序打乱 洗牌 print(lst)