代码改变世界

学习python第十一天,函数3 函数的序列化和反序列化

2018-12-25 06:57  筑_梦  阅读(964)  评论(0编辑  收藏  举报

我们把变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

一、存文件,序列化
info = {
    'name':'alex',
    'age':22 }
f =open("test.text","w")#存文件
f.write(str(info))
f.close()

   

 

二、取文件 反序列化
f =open("test.text","r")#以写的形式打开存文件
data=f.read()
f.close()
print(data)

  

 
三、如果要把字符串变字典单独取age值
1 data=eval(f.read())
2 print(data['age'])

 




四、使用模块序列化,高级版的序列化json+dumps
import json
 f =open("test.text","w")#存文件,序列化
 #print(json.dumps(info))
 f.write(json.dumps(info))
 f.close()

  

 



四-(1)使用模块序列化,序列化两次json+dumps
 import json
 info = {
      'name':'alex',
      'age':22 }
 f =open("test.text","w")#存文件,序列化
 #print(json.dumps(info))
 f.write(json.dumps(info))
 info['age']=21             #修改age
 f.write(json.dumps(info))
 f.close()

 使用模块序反列化,没办法反序列化两个字典



五、使用模块高级版的反序列化json+ loads
import json
 f =open("test.text","r")#取文件,反序列化
 #print(json.dumps(info))
 data=json.loads(f.read())
 print(data['age'])
 f.close()

  

 

六,处理更加复杂的数据的序列化使用picke+dumps+loads

 

 import pickle
  def sayhi(name):
      print("hello,",name)
  info = {
     'name':'alex',
      'age':22,
      'func':sayhi
  }
  f =open("test.text","wb")#默认为二进制需改wb
 f.write(pickle.dumps(info))
 print(pickle.dumps(info))
 f.close()

  


七,处理更加复杂的数据的序列化使用picke+dump+loads
import pickle
def sayhi(name):
    print("hello,",name)
info = { 'name':'alex',
    'age':22,
    'func':sayhi}
f = open("test.text","wb")
pickle.dump(info,f) #=f.write( pickle.dumps( info) )
f.close()