logging模块,序列化,range模块

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)

 

 

 

 

 

 

 

 

 

posted on 2019-01-16 16:42  antigeneral  阅读(147)  评论(0编辑  收藏  举报

导航