设为首页 加入收藏

TOP

Pythoy 数据类型序列化之json&pickle 模块详述
2018-05-21 15:49:24 】 浏览:84
Tags:Pythoy 数据 类型 序列化 json&pickle 模块 详述

就是将内存中的数据类型变成可存储或传输的东西,这一过程叫做序列化,在python中叫pickling,在其它语言叫 serialization,marshalling,flattening等,其实base64转码也可叫做序列化,因为很多文本协议如http,smtp都是只支持ascii编码传输。
序列化之后可以将内容写入磁盘,或通过网络传输到其它机器。
反序列化就是序列化的逆过程,unpickling


__Python__提供了两个模块来进行序列化操作,分别是pickle和json


pickle是python语言专属的序列化方式。
pickle模块可以将python中的任何数据类型进行序列化,并序列化为bytes类型。
pickle模块提供的方法


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))


json不多说,是数据交换的一种格式。叫 json document
json模块方法和pickle类似:


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.tool提供在命令行对json字符串进行json格式校验和漂亮打印pretty-print


用法:
:> echo '{"josn": "obj"}' | python -m json.tool
{
"json":"obj"
}
:> python -m json.tool mp_films.json # 后面跟json文件


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一个著名的日志系统是怎么设计出.. 下一篇排序算法的C语言实现(上 比较类排..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目