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转换后成字符串之后 必须是双引号(普通的字符串形式都是单引号) 不然json不认

 

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中几乎所有的数据类型, 缺点是不能跨语言

 

posted @ 2018-08-09 20:57  Morallz  阅读(143)  评论(0编辑  收藏  举报