python之模块-序列化 random模块
什么是模块?
import json import pickle # 模块:py文件 # 1,内置模块 time os random shelve re 等等 # 2,拓展模块。 大神写的。beautifulsoup iteat # 3, 自定义模块。 # 序列化模块。 # 将重要的数据 变成可以传输,并且得到后能够反解出来。 # json : 适用于所有语言。 # dict list, tuple str int, float True False None # +-------------------+---------------+ # | Python | JSON | # += == == == == == == == == == += == == == == == == == + # | dict | object | # +-------------------+---------------+ # | list, tuple | array | # +-------------------+---------------+ # | str | string | # +-------------------+---------------+ # | int, float | number | # +-------------------+---------------+ # | True | true | # +-------------------+---------------+ # | False | false | # +-------------------+---------------+ # | None | null | # +-------------------+---------------+ # pickle 只用于Python语言之间的传输,包含所有的python支持的数据类型。 # shelve :
# 序列化: dic = {'name': '二狗', 'age': 25, 'sex': '男'} ret = str(dic).encode('utf-8') # ret1 = ret.decode('utf-8') print(ret1, type(ret1)) print(type(eval(ret1))) #不要用,不安全
# json
# dumps loads # 网络传输
dic = {'name': '二狗', 'age': 25, 'sex': '男'} ret = json.dumps(dic,ensure_ascii=False) # 序列化过程 : 就是变成一个特殊的字符串 respon = json.loads(ret) # 反序列化:将序列化的特殊字符串反解成原来的类型。 print(ret,type(ret)) #特殊的字符串"" #序列化过程 # print(dic) #字典的字符串是'' print(respon, type(respon)) #反序列化过程
# dump load # 写入文件
# dump load # 写入文件 dic = {1:{'username': '二狗1', 'password': 123}, 2:{'username': '二狗2', 'password': 123}, 3:{'username': '二狗3', 'password': 123}, } f = open('json_file','w') json.dump(dic,f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 f.close() f = open('json_file') dic2 = json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 print(dic2,type(dic2)) f.close() print(type(dic2),dic2)
# pickle 只用于Python语言之间的传输,包含所有的python支持的数据类型。 dic = {'name': '二狗', 'age': 25, 'sex': '男'} ret = pickle.dumps(dic) # respon = pickle.loads(ret) print(ret) print(respon)
# dump load # 写入文件 (这个不仅可以写常规的数据,还可以将对象写入)
class A: name = 'alex' def func(self): print(666) obj = A() f = open('pickle_file','wb') #写进入 pickle.dump(obj,f) #用pickle都是乱码 f.close() f = open('pickle_file','rb') #打开以读的形式 ret = pickle.load(f) # print(ret.name) ret.func() f.close() # 思路:假如你打游戏,每次进去的时候,你的状态都在,就自己用这种方式,能把对象dump到一个文件当中,读取出来还保有之前的信息。
shelve
import shelve #用的很少 f = shelve.open('shelve_file') f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据 f.close()
# 写完之后出来3个文件。
import shelve f1 = shelve.open('shelve_file') existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错 f1.close() print(existing)
random模块:
print(random.random()) # 随机在0~1之间的float print(random.uniform(1,10)) # 1 ~10 浮点型 print(random.randint(1,10)) # 1~10 之间的整数 *** print(random.randrange(1,10,2)) # 大于等于1且小于10之间的奇数) print(random.choice([1, '23', [4,5]])) # 多选择一 *** print(random.sample([1,'23',[4,5], 'alex'],2)) # 列表元素 任意2个组合) item = [1, 3, 5, 7, 9] random.shuffle(item) # 打乱次序 *** print(item)
# 生成随机验证码: 大写 小写 数字 3个混合组合 # 0~9 随机选一个 # a~z 随机选一个 # 两个选一个 import random # print(chr(97)) # print(chr(122)) def code(): codes = '' #初始化一个字符串 for i in range(5): num = str(random.randint(0, 9)) #在0-9中随机选择数字 char1 = chr(random.randint(97, 122)) #a:97 z:122 a-z中随机选择一个小写字母 char2 = chr(random.randint(65, 96)) #A:65 Z:96 A-Z中随机选择一个大写字母 c1 = random.choice([num, char1, char2]) #放到一个列表中 # print(c1) codes += c1 #codes = codes + c1 return codes #返回codes结果 print(code()) # 打印一下codes结果
作者:wangkaiok —— 小菜鸟111
出处:http://www.cnblogs.com/wangkaiok/
本文版权归作者和博客园共有,但未经作者同意禁止转载,转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。