Python入门之模块序列化
序列化(Serialization)是什么?
序列化将对象的状态信息转换为可以存储或传输的形式的过程;在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
简单的可以理解,就上将内存中的变量数据转而存储到磁盘上就是序列化。反之,把变量数据从序列化的对象重新读到内存里称之为反序列化。
python中有两个可用于序列化的模块,分别是json和pickle;下面将分别介绍json和pickle用法。
pickle是python中独有的序列化模块,所谓独有,就是指不能和其他编程语言的序列化进行交互,因为pickle将数据对象转化为bytes。
json是序列化的一种标准通用格式,可以在各个编程语言中传递数据。就像之前的XML格式,但是json比XML更快。
pickle:以二进制形式存放数据
pickle模块提供了四个功能:dumps、dump、loads、load。dumps和dump都是进行序列化;而loads和load则是反序列化
pickle序列化数据:
dumps:将所传入的变量的值序列化为二进制数据,然后写入文件或者进行传输。
dump:可以传入两个参数,一个为需要序列化的变量,另一个为需要写入的文件。
#!/usr/bin/env python3 import pickle #需要存储的数据 info = { "chengd":"123", "xrd":"123456" } #以二进制方式打开文件,并将序列化后的数据直接存储到文件中 with open("/tmp/user.txt","wb") as f: pickle.dump(info,f) #或f.write(pickle.dumps(info)) 执行结果: [root@localhost 20170712]# ./pickle_write.py [root@localhost 20170712]# cat /tmp/user.txt }q(XchengdqX123qXxrdqX123456qu. #数据已被序列化为二进制数据并存储在文件中
pickle反序列化数据:
loads:首先把对象从磁盘文件读到内存后,才可以用loads方法反序列化出对象
load:load方法可以直接反序列化一个磁盘文件
#!/usr/bin/env python3 import pickle #以二进制方式读取文件,并 反序列化文件内的数据 with open("/tmp/user.txt","rb") as f: data = pickle.load(f) #或data = pickle.loads(f.read()) print(data) 执行结果: [root@localhost 20170712]# ./pickle_open.py {'chengd': '123', 'xrd': '123456'} #将二进制数据正常反序列化
json:以字符串形式存放数据
Json格式介绍:http://www.cnblogs.com/SkySoot/archive/2012/04/17/2453010.html
json中的方法和pickle中差不多,也是dumps,dump,loads,load。使用上也没有什么区别,区别在于,json中的序列化后格式为字符。
json序列化数据:
#!/usr/bin/env python3 import json #需要存储的数据 info = { "linux":"100¥", "python":"199¥" } #打开文件,并将序列化后的数据直接存储到文件中 with open("/tmp/book.txt","w") as f: json.dump(info,f) #或f.write(json.dumps(info)) 执行结果: [root@localhost 20170712]# ./json_write.py [root@localhost 20170712]# cat /tmp/book.txt {"linux": "100\uffe5", "python": "199\uffe5"}
json反序列化数据:
#!/usr/bin/env python3 import json with open("/tmp/book.txt","r") as f: data = json.load(f) #或data = json.loads(f.read()) print(data) 执行结果: [root@localhost 20170712]# ./json_open.py {'linux': '100¥', 'python': '199¥'}
参考:http://www.cnblogs.com/MnCu8261/p/5539254.html
***********************************************************
学习永远不晚。——高尔基
***********************************************************

浙公网安备 33010602011771号