Python序列化与反序列化-json与pickle
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.json的序列化方式与反序列化方式
1>.json序列化
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 8 """ 9 一.什么是序列化: 10 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫做picking,在其他语言中也被 11 称之为serialization,marshalling,flattening等等,都是一个意思。序列化之后,就可以把序列化后的内容写入磁盘, 12 或者通过网络传输到别的机器上,反过来,把变量从内容从序列化的对象重新督导内存里称之为反序列化,即unpicking。 13 14 二.序列化与编码的关系 15 序列化是在编码之前进行的操作。序列化是将各种数据类型统一处理为字符串,在序列化完成之后需要指定这些 16 字符串以何种方式(如,utf-8,gbk等等)存入硬盘哟!当然在反序列化一个文件的内容是,首先做的操作是解码, 17 也就是以哪种方式打开文件,如果编码格式打开正常就会获取到正确的字符串,这样就可以进行反序列化操作啦。 18 19 三.json模块 20 如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的办法就是序列化为json, 21 因为json表示出来就是一个字符串,可以被所有语言读取,也可以方便的存储到磁盘或者通过网络传输。json不仅是标准格式, 22 并且比XML更快,而且可以直接在web页面中读取,非常方便。 23 24 """ 25 26 import json 27 28 accounts = { 29 "Name":"yinzhengjie", 30 "id": "210", 31 "banlance": "20000", 32 } 33 34 #序列化方式一: 35 # f = open(r"E:\Code\pycharm\文件存放处\python学习笔记\Day11\yinzhengjie.txt","w") #打开文件 36 # 37 # json_str = json.dumps(accounts) #序列化操作 38 # 39 # f.write(json_str) #写入文件 40 41 #序列化方式二: 42 with open(r"E:\Code\pycharm\文件存放处\python学习笔记\Day11\yinzhengjie.txt","w")as f: 43 json.dump(accounts,f)
1 {"Name": "yinzhengjie", "id": "210", "banlance": "20000"}
2>.反序列化方式
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 import json 8 9 with open(r"E:\Code\pycharm\文件存放处\python学习笔记\Day11\yinzhengjie.txt")as f: 10 print(json.load(f))
二.pickle序列化与反序列化
1>.序列化方式
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 import pickle 8 9 ‘‘‘ 10 pickle: 11 1.>用于python特有的类型 和 python的数据类型间进行转换 12 2.>pickle模块提供了四个功能:dumps、dump、loads、load. 13 补充说明:将数据通过特殊的形式转换成只有python解释器识别的字符串,这个过程我们叫做序列化,而把哪些python能够识别的字符串转换成我们能看懂的叫做反序列化。 14 ‘‘‘ 15 16 17 DataInfo = { 18 "Name":"尹正杰", 19 "Password":"123" 20 } 21 22 23 24 # #将数据通过特殊的形式转换为只有python语言知识的字符串并写入文件 25 # pickle_str = pickle.dumps(DataInfo) 26 # print(pickle_str) 27 # f = open("yinzhengjie.txt","wb") 28 # f.write(pickle_str) 29 30 #上面的写入文件的方法也可以这么玩,看起来更简单 31 with open("yinzhengjie.txt","wb") as f: 32 pickle.dump(DataInfo,f)
2.反序列化方式
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 import pickle 8 9 ‘‘‘ 10 用于序列化的两个模块 11 1>.json:用于字符串 和 python数据类型间进行转换 12 2>.pickle:用于python特有的类型和python的数据类型间进行转换 13 json模块提供了四个功能:dumps、dump、loads、load 14 pickle模块提供了四个功能:dumps、dump、loads、load 15 ‘‘‘ 16 17 18 f = open("yinzhengjie.txt","rb") 19 20 # print(pickle.loads(f.read())) #loads方式反序列化 21 22 print(pickle.load(f)) #load方式反序列化
三.对比json和pickle的异同:
1>.相同点:都是用于系列化和反序列化的模块。
2>.不同点:json是在所有语言都通用的数据存储格式,而pickle是仅仅只有python语言独有的存储格式。