Python基础知识之json&pickle模块
json & pickle模块
-
json模块:只适用于简单的数据类型,是一种跨平台的模块。
假设我们有了一段数据是这样定义的:
info = { 'name':'alex', 'age':22 }
对于这种简单的数据类型,我们可以直接使用
Json
来进行数据的序列化和反序列化:-
序列化
dumps
:import json f = open("test.text","wb") f.write(json.dumps(info)) f.close()
同样的,我们可以使用
dump
方法来代替dumps
方法:
只需要将f.write(json.dumps(info))
替换成json.dump(info,f)
就可以了。 -
反序列化
loads
:import json f = open("test.txt","rb") data = json.loads(f.read())
同样的,我们可以使用
load
方法来代替loads
方法:
只需要将f.write(json.dumps(info))
替换成json.dump(info,f)
就可以了。
-
-
pickle模块:能够转换传递复杂的数据类型,是Python特有的一种数据类型。
通过上面的json模块我们发现,json只能传递一些简单的数据类型,如果我们想给
info
添加一个函数呢?def sayhi(name): print("hello2,",name) info = { 'name':'alex', 'age':22 'func':sayhi }
这个时候,就需要使用我们的pickle模块了。
- 序列化
dumps
:
同样的,我们可以使用import pickle f = open("test.text","wb") f.write(json.pickle(info)) f.close()
dump
方法来代替dumps
方法:
只需要将f.write(pickle.dumps(info))
替换成pickle.dump(info,f)
就可以了。 - 反序列化
loads
:
同样的,我们可以使用import pickle def sayhi(name): print("hi"+name) f = open("test.txt","rb") data = pickle.loads(f.read())
load
方法来代替loads
方法:
只需要将f.write(picklejson.dumps(info))
替换成pickle.dump(info,f)
就可以了。需要注意的是,在反序列话的时候,需要先重新定义
sayhi()
函数。
- 序列化
-
注意事项:
在使用json模块和pickle模块序列化和反序列化数据的时候采取的是一dump一load的原则,即只dump一份同时也只load一份。