json&pickle
用于序列化的两个模块
json,用于字符串 和 python数据类型间进行转换,可以与其他语言通用
pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
示例1(json):
import json
person = {
'name' : 'maria',
'age' : 22,
'sex' : 'female'
}
with open(r'text.txt','w') as f:
json.dump(person,f) #原则上一次dump一次load,因为多次dump后,在load会出错
#f.write(json.dumps(person)) #效果同上
运行结果:
示例2:
import json,pickle
with open(r'text.txt','r') as f:
data = json.load(f)
#data = json.loads(f.read())
print(data)
运行结果:
{'name': 'maria', 'age': 22, 'sex': 'female'}
示例3(pickle)
import pickle
def hello(name):
print('hello {}'.format(name))
person = {
'name' : 'maria',
'age' : 22,
'sex' : 'female',
'func' : hello
}
with open(r'text.txt','wb') as f:
pickle.dump(person,f) #原则上一次dump一次load,因为多次dump后,在load会出错
#pickle可以处理函数在内存的地址,
#f.write(pickle.dumps(person)) #效果同上
运行结果:
示例4
import pickle
def hello(name,age): #因为data中又函数内存地址,但是上一个代码运行完后就已经释放
#所以要添加新的
print('{} is {} years old'.format(name,age))
with open(r'text.txt','rb') as f:
data = pickle.load(f)
#data = pickle.loads(f.read())
print(data)
print(data['func']('maria',23))
运行结果:
{'name': 'maria', 'age': 22, 'sex': 'female', 'func': <function hello at 0x035B9C00>}
maria is 23 years old
None