json和pikles序列化

#应用于虚拟机的暂停挂起和恢复等方面,游戏的暂停和恢复。
'''info = {
    'name':'cay',
    'age' : 23,

}


f = open('1.txt','w')
f.write(str(info))
f.close()
#可以存进去,但是怎么恢复为字典呢?
#序列化:把字典等转为字符串
'''

'''#反序列化,字符串转为字典,忘了eval吧。。。他不通用
f = open('1.txt','r')
data = eval(f.read())
f.close()
print(data['age'])
'''


'''#json序列化
import json
info = {
    'name':'cay',
    'age' : 23,

}


f = open('1.txt','w')
f.write(json.dumps(info))


#反序列化
import json
f = open('1.txt','r')
data = json.loads(f.read())
print(data['age'])
'''


'''
#试试json能否将函数序列化,json可以跨语言使用
import json
def func(name):
    print('hello',name)

info = {
    'name':'cay',
    'age' : 23,
    'hs' : func

}


f = open('1.txt','w')
f.write(json.dumps(info))
f.close()
#报错:函数不可序列化TypeError: Object of type function is not JSON serializable
#json只支持最简单的
#xml这种标记式的语言正在逐渐被json所取代
'''




'''#pickle进行序列化
import pickle


def func(name):
    print('hello', name)

info = {
    'name': 'cay',
    'age': 23,
    'hs': func

}

#f = open('1.txt', 'w')
#f.write(pickle.dumps(info))#这行会报错,默认变成了二进制,打印一下
#print(pickle.dumps(info))
#果然是个二进制b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00cayq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x02\x00\x00\x00hsq\x04c__main__\nfunc\nq\x05u.'
#所以要用wb打开文件
f = open('1.txt','wb')
f.write(pickle.dumps(info))
f.close()

#1.txt里变成了下面的二进制格式,怪怪的。。。。

�}q (X   nameqX   cayqX   ageqKX   hsqc__main__
func
qu.

'''

#pickle进行反序列化
import pickle
#改掉拷贝过来函数的输出,发现不是之前序列化函数的输出
#所以序列化掉的不是内存地址,而是整个数据对象
def func(name):
    print('hello2', name)
f = open('1.txt','rb')

data = pickle.loads(f.read())

print(data['hs']('cay'))

f.close()
#报错AttributeError: Can't get attribute 'func' on <module '__main__' from '
#原因,函数func在之前运行完已经被释放了,找不着了。。
#so  我们应该这样
'''def func(name):
    print('hello', name)
#把函数拷贝过来

'''


#注:pickle是python专属的,别的语言无法识别


'''#另外的方法
f.write(json.dumps(info))等同于
json.dump(info)


json.loads(f.read())等同于
json.load(f)


f.write(pickle.dumps(info))等同于
pickle.dump(info)

pickle.loads(f.read())等同于
pickle.load(f)

'''



#扩展
#可以进行多次序列化,第一次dump后,将age改为21,再dump一次,发现可行,要先去掉func,存了两个字典进去1.txt
#但是,不可以进行多次反序列化,会报错,extra data。但是2里可以,先dump进去的先load出来,没啥意义。。所以取消掉了
#虚拟机里有快照功能,每一个快照都是存在文件中,不同状态dump在不同的文件中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值