加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Pythoy 数据类型序列化之json&pickle 模块总结

发布时间:2021-12-05 16:33:54 所属栏目:PHP教程 来源:互联网
导读:Pythoy 数据类型序列化jsonpickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什么是序列化/反序列化? 就是将内存中的数据类型变成可存储或传输的东西,这一过程叫做序列化,在python中叫pickling,在其

Pythoy 数据类型序列化——json&pickle 模块
TOC
什么是序列化/反序列化
pickle 模块
json 模块
对比json和pickle
json.tool 命令行接口
什么是序列化/反序列化?
就是将内存中的数据类型变成可存储或传输的东西,这一过程叫做序列化,在python中叫pickling,在其它语言叫 serialization,marshalling,flattening等,其实base64转码也可叫做序列化,因为很多文本协议如http,smtp都是只支持ascii编码传输。
序列化之后可以将内容写入磁盘,或通过网络传输到其它机器。
反序列化就是序列化的逆过程,unpickling
 
__Python__提供了两个模块来进行序列化操作,分别是pickle和json
 
pickle模块
pickle是python语言专属的序列化方式。
pickle模块可以将python中的任何数据类型进行序列化,并序列化为bytes类型。
pickle模块提供的方法
 
dump(obj, fp) 将obj序列化后直接写入fp对象中
dumps(obj) 将obj序列化为bytes,方法return该bytes对象
load(fp) 从fp中读取序列化bytes对象并反序列化
loads(bytes) 将bytes反序列化
实践:
import pickle
with open('test.pkl', 'wb') as fp:  # 注意因为pickle序列化后是bytes所以file-object 能够写入二进制,那么open的打开方式就必须是二进制方式'wb'。
    pickle.dump({'a': 1, 'b': 2}, fp)
 
with open('test.txt', 'rb') as fp: # 同样读取也是要是一个binary file-object
    print(pickle.load(fp))
 
助记:dumps带s就是序列化为string,dump不带s就是序列化为string后直接写入fp。load和loads也一样这样记。
如果pickle序列化写入文件,那么这个文件后缀最好用.pkl或.pk,辨识度高
json模块
json不多说,是数据交换的一种格式。叫 json document
json模块方法和pickle类似:
 
dump(obj, fp) 将obj序列化后直接写入fp对象中,由于序列化后的json是字符串,所fp必须是text Stream类型
dumps(obj) 将obj序列化为json字符串,方法return该json字符串
load(fp) 从fp中读取json并反序列化 ,这个就不要求fp是text Stream类型,也就是从文件中既可以读取bytes,也可以string。
loads(obj) 将json反序列化,可以是json的字符串或bytes 或bytearray
注意,tuple元组的序列化会会编程json的array数组,如果再进行deserialize就编程了列表而不是元组。
实验:
import json
 
i = 10
s = 'hello world!'
t = (1,)
l = [10, 'hello world!', ['a', 'b'], {'a': 1, 'b': 2}]
d = {'a': 1, 'b': 2, 'c': l}
 
print(json.dumps(i))
print(json.dumps(s))
print(json.dumps(t))
print(json.dumps(l))
print(json.dumps(d))
 
with open('test.json', 'w') as fp:
    json.dump(l, fp)
 
with open('test.json', 'rb') as fp:
    print(json.load(fp))
 
print(json.loads(b'[10, "hello world!", ["a", "b"], {"a": 1, "b": 2}]'))
 
结果:
 
10
"hello world!"
[1][10, "hello world!", ["a", "b"], {"a": 1, "b": 2}]
{"a": 1, "b": 2, "c": [10, "hello world!", ["a", "b"], {"a": 1, "b": 2}]}
[10, 'hello world!', ['a', 'b'], {'a': 1, 'b': 2}][10, 'hello world!', ['a', 'b'], {'a': 1, 'b': 2}]
 
对比json和pickle
json
 
在python中一般只能序列化int/str/list/dict
跨语言
pickle
 
能序列化python任何对象
只能在python中使用
json.tool 命令行接口
json.tool提供在命令行对json字符串进行json格式校验和漂亮打印pretty-print
 
用法:
:> echo '{"josn": "obj"}' | python -m json.tool
{
"json":"obj"
}
:> python -m json.tool mp_films.json # 后面跟json文件

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读