ql的python学习之路-day12

前言这一节主要学习json和pickle

一、json序列化和反序列化

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author:qinjiaxi
 4 '''
 5 1.序列化是指将内存的对象存成字符串;
 6 2.反序列化是指将存起来的字符串变成之前的内存对象;
 7 3.json主要作用是所有语言之间的交互,只能进行简单转换比如字符串、列表、字典等,不能处理函数;
 8 4.xlm和json一样,逐渐被json替代;
 9 '''
10 import json
11 info = {
12     'name' : 'qinlang',
13     'age' : 3
14 }
15 f = open('test.txt', 'w')
16 # f.write(str(info))
17 f.write(json.dumps(info))#序列化
18 f.close()

二、json序列化和反序列化(二)

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author:qinjiaxi
 4 import json
 5 info = {
 6     'name' : 'qinlang',
 7     'age' : 3,
 8 
 9 }
10 f = open('test.txt', 'w')
11 # f.write(str(info))
12 f.write(json.dumps(info))#序列化
13 info['age'] = 4#修改字典中的值
14 json.dump(info, f)#第二次序列化
15 f.close()
16 
17 #在python2.7里可以一次一次的load,在3.0中只能load一次
18 #注意:写程序时,只dump一次,只load一次,如果必须要多次,就要多保存几个文件
19 import json
20 f1 = open('test.txt', 'r')
21 data = json.loads(f1.read())#反序列化
22 print(data)
23 f1.close()

三、pickle的序列化和反序列化

序列化:

 1 # Author:qinjiaxi
 2 #pickle相对json来说可以处理复杂的数据类型,但是只能在python中用
 3 import pickle
 4 def sayhi(name):
 5     print("hi",name)
 6 info = {
 7     'name' : 'qinlang',
 8     'age' : 3,
 9     'func' : sayhi
10 }
11 f = open('test.txt', 'wb')
12 # f.write(str(info))
13 f.write(pickle.dumps(info))#序列化
14 f.close()
15 
16 pickle.dump(info, f)#第一个是要序列内存的对象,第二个是文件和这个一样f.write(pickle.dumps(info))#序列化

反序列化:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:qinjiaxi
import pickle
#必须加上之前定义的函数,不然会报错,因为之前的函数在序列化中运行后释放了就找不到了
#注:这个函数的内存地址跟之前的不一样,反序列化的是整个函数对象
def sayhi(name):
    print("hi",name)
    print('hi2',name)#还可以增加其他功能

f1 = open('test.txt', 'rb')
data = pickle.loads(f1.read())#反序列化
print(data)
print(data['func']('hehe'))#
f1.close()

data = pickle.load(f)#相当于data = pickle.loads(f1.read())#反序列化

猜你喜欢

转载自www.cnblogs.com/qinlangsky/p/9581866.html