python常用模块——序列化模块,Json,pickle
先明白什么什么化的词语,说明已经到了这个阶段,已经实现了这个结果
例如,序列化,归一化,实例化,初始化
序列化,就是将某一个对象变成了一个序列
#序列: 列表 元祖 字符串
#python中序列化中的序列 只包含 字符串
……得到一个字符串的结果,过程就叫做序列化
字典,列表,数字,对象 --序列化-> 字符串
为什么要序列化
#1.要把内容写入文件 需要用序列化
#2. 网络传输数据的时候 需要用序列化
从字符串 ----反序列化 --> 字典/ 列表/ 数据/ 对象
eval 不能随便用,因为不能保证从网络上来的数据的安全性
#json
共四个方法
dumps
loads
dump
load
import json:
dic = {'aaa' : 'bbb', 'ccc' : 'ddd'} #转换成字符串
str_dic = json.dumps(dic)
print(str_dic, type(str_dic))
with open('json_dump','w') as f: #之前写入文件
f.wirte(str_dic)
dic = {'aaa' : 'bbb', 'ccc' : 'ddd'}
with open('json_dump2', 'w') as f:
json.dump(dic, f)
#注意dump直接操作变量和文件,直接将变量写入到文件中
#括号里接收两个参数,一个是写入的内容dic,另外一个是文件句柄 f
json.loads(str_dic) #将字符串转换成字典
with open('json_dump2', 'r') as f:
json.load(f)
直接拿到上面dump写入文件f的变量
json格式的限制一:json 字典格式的key必须是字符串数据类型,如果你输入的key是一个数字,他也会帮助你转换成字符串的类型
dic = {1:2,3:4}
str_dic = json.dumps(dic)
json 是否支持元祖 对元祖做value的 字典会把元祖强行转换成列表 并且loads后还是列表。
dic = {‘abc':(1,2,3)}
str_dic = json.dumps(dic)
new_dic = json.loads(str_dic)
json是否支持元祖做key,完全不支持元祖做key
dic = {(1,2,3):'abc'}
str_dic = json.dumps(dic) #报错
json能不能多次dump数据到文件里, 可以多次dump 不能load出来
lst['aaa',123','bbb',456]
dic{'aaa':'bbb', 'ccc':'ddd'}
with open('json_dump', 'w') as f:
json.dump(lst.f)
json.dump(dic.f)
with open ('json_dump') as f:
ret = json.load(f)
print(ret) #报错
想dump多个数据进入文件, 用dumps
lst['aaa',123','bbb',456]
dic{'aaa':'bbb', 'ccc':'ddd'}
with open('json_dump', 'w') as f:
str_lst = json.dumps(lst)
str_dic = json.dumps(dic)
f.write(str_lst +'\n')
f.write(str_dic +'\n')
with open('json_dump') as f:
for line in f:
ret = json.loads(line)
print(ret)
json 是所有语言都能认识的数据类型, 但支持的数据类型很少,
pickle 可以支持python中几乎所有的数据类型, 缺点是不能跨语言