python基础2-pickle序列化

pickle序列化

import pickle
def sayhi(name):
        print("hello,",name)
data = {'name':'luoliyu',
        'age':25,
        'func':sayhi
        }
f = open("test.txt","wb")
print(type(pickle.dumps(data)))
#pickle.dumps()默认变成了二进制
print(pickle.dumps(data))
f.write(pickle.dumps(data))
#等同于pickle.dump(data,f)
f.close()

#result
<class 'bytes'>
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x07\x00\x00\x00luoliyuq\x02X\x03\x00\x00\x00ageq\x03K\x19X\x04\x00\x00\x00funcq\x04c__main__\nsayhi\nq\x05u.'


pickle反序列化

import pickle
f = open('test.txt','rb')
info = pickle.loads(f.read())
#等同于info = pickle.load(f)
print(type(info))
print(info['name'])

#result
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/study_self/built-in function/json_fanxuliehua.py", line 4, in <module>
    info = pickle.loads(f.read())
AttributeError: Can't get attribute 'sayhi' on <module '__main__' from 'C:/Users/Administrator/PycharmProjects/study_self/built-in function/json_fanxuliehua.py'>

#虽然存下了内存地址,但是上次程序结束,内存就释放啦,所以存内存地址不可行
#想要序列化,需要定义一个函数名相同的函数
def sayhi(name):
        print("hello,",name)

#总结:pickle只有在python中能用

posted @ 2017-08-28 17:44  larlly  阅读(268)  评论(0)    收藏  举报