python 序列化之pickle
2016-07-26 14:26
489 查看
如果希望透明地存储 Python 对象而不丢失其身份和类型等信息则需要某种形式的对象序列化它是一个将任意复杂的对象转成对象的文本或二进制表示的过程。同样必须能够将对象经过序列化后的形式恢复到原有的对象。在 Python 中这种序列化过程称为 pickle可以将对象 pickle 成字符串、磁盘上的文件或者任何类似于文件的对象也可以将这些字符串、文件或任何类似于文件的对象 unpickle 成原来的对象。我们将在本文后面讨论 pickle的两组函数
(1)dumps(),loads()方法
和json模块一样pickle模块同样有dumps()和load()方法只是输出和结果上和json不同pickle输出的是二进制格式json输出字符串格式而且pickle输出的格式只有python可以loads(),json是跨语言的。
b'\x80\x03}q\x00(X\x02\x00\x00\x00k2q\x01X\x02\x00\x00\x00v2q\x02X\x02\x00\x00\x00k1q\x03X\x02\x00\x00\x00v1q\x04u.' <class 'bytes'>
{'k1': 'v1', 'k2': 'v2'} <class 'dict'>
另一个区别在于pickle可以用于任何数据类型的序列化而json只能用于基本数据类型比如下面这段代码就会报错,因为json不能对"对象”序列化
TypeError: <__main__.foo object at 0x01EC2E50> is not JSON serializable
(2)dump()load()方法
和json一样pickle也有dump()和load()方法但是在open文件时需要指定二进制方法
<__main__.foo object at 0x024B8430> <class '__main__.foo'>
dump()写入的temp文件内容如下
?c__main__
foo
q )?q.
(1)dumps(),loads()方法
和json模块一样pickle模块同样有dumps()和load()方法只是输出和结果上和json不同pickle输出的是二进制格式json输出字符串格式而且pickle输出的格式只有python可以loads(),json是跨语言的。
dic1 = {'k1':'v1', 'k2':'v2'} r1 = pickle.dumps(dic1) print(r1, type(r1)) dic2 = pickle.loads(r1) print(dic2, type(dic2))程序执行结果
b'\x80\x03}q\x00(X\x02\x00\x00\x00k2q\x01X\x02\x00\x00\x00v2q\x02X\x02\x00\x00\x00k1q\x03X\x02\x00\x00\x00v1q\x04u.' <class 'bytes'>
{'k1': 'v1', 'k2': 'v2'} <class 'dict'>
另一个区别在于pickle可以用于任何数据类型的序列化而json只能用于基本数据类型比如下面这段代码就会报错,因为json不能对"对象”序列化
class foo: def __init__(self): pass obj1 = foo() r2 = json.dumps(obj1) print(r2)报错如下
TypeError: <__main__.foo object at 0x01EC2E50> is not JSON serializable
(2)dump()load()方法
和json一样pickle也有dump()和load()方法但是在open文件时需要指定二进制方法
class foo: def __init__(self): pass obj1 = foo() pickle.dump(obj1, open('temp', 'wb')) r3 = pickle.load(open('temp','rb')) print(r3, type(r3))程序执行结果
<__main__.foo object at 0x024B8430> <class '__main__.foo'>
dump()写入的temp文件内容如下
?c__main__
foo
q )?q.
相关文章推荐
- mysql load data 导出、导入 csv
- Ruby中require、load、include、extend的区别介绍
- mysql LOAD语句批量录入数据
- jquery中load方法的用法及注意事项说明
- C++软件添加dump调试打印日志(推荐)
- jQuery load方法用法集锦
- jquery通过load获取文件的内容并跳到锚点的方法
- jQuery的load()方法及其回调函数用法实例
- jquery中页面Ajax方法$.load的功能使用介绍
- jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
- 用Jquery.load载入页面后样式没了页面混乱的解决方法
- 使用dump transaction with no_log的危险性说明
- mysql 的load data infile
- Lazy Load 延迟加载图片的jQuery插件中文使用文档
- 使用dump函数,给php加断点测试
- 如何让浏览器支持jquery ajax load 前进、后退功能
- Oracle常用dump命令,记录一下备查。
- mysql Load Data InFile 的用法
- jQuery中ajax的load()与post()方法实例详解
- php中simplexml_load_string使用实例分享