python struct、json、pickle模块
2016-03-02 20:58
1111 查看
(1)json模块
json模块的dumps和dump方法可以将python字典转为符合json数据格式要求的字符串数据,而loads() load()方法可以将json字符串数据转为python字典数据类型
(2)pickle模块(cPickle模块)
pickle模块是纯Python代码书写,cPickle模块则由C语言编写,cPickle模块的速度要比pickle快,故一般我们会使用cPickle模块。
一般import cPickle模块使用上述代码
pickle模块的dumps和dump方法可以用于将类对象、实例对象、函数对象(毕竟python中一切皆对象)序列化存储,以实例对象为例,实例对象序列化后再多次反序列化后会生成多个不同id值的实例对象;模块的loads和load方法则是将序列化的对象反序列化。
python对象序列后的结果是一python的str类型数据。
(3)struct模块
struct模块的pack和upack方法可以按照特定格式编码和解析二进制数据。特别是在网络传输中和主机的小端子节序和大端子节序。
一个struct和pickle模块配合使用的例子是,我们将一个对象序列化后以网络进行传输,因为通过一次网络连接可以传输多个序列化对象,但是由于tcp字节流是无边界的字节流,故要表明各个传输来的序列化子节序的长度,故我们可以将序列化对象长度作为所要传递失望序列化对象的前缀进行传输。长度值我们可以先试用pack进行编码,接收端试用upack解码,然后依照此长度进行读取。
实例代码如下:
json模块的dumps和dump方法可以将python字典转为符合json数据格式要求的字符串数据,而loads() load()方法可以将json字符串数据转为python字典数据类型
(2)pickle模块(cPickle模块)
pickle模块是纯Python代码书写,cPickle模块则由C语言编写,cPickle模块的速度要比pickle快,故一般我们会使用cPickle模块。
try: import cPickle as pickle except ImportError: import pickle
一般import cPickle模块使用上述代码
pickle模块的dumps和dump方法可以用于将类对象、实例对象、函数对象(毕竟python中一切皆对象)序列化存储,以实例对象为例,实例对象序列化后再多次反序列化后会生成多个不同id值的实例对象;模块的loads和load方法则是将序列化的对象反序列化。
python对象序列后的结果是一python的str类型数据。
(3)struct模块
struct模块的pack和upack方法可以按照特定格式编码和解析二进制数据。特别是在网络传输中和主机的小端子节序和大端子节序。
一个struct和pickle模块配合使用的例子是,我们将一个对象序列化后以网络进行传输,因为通过一次网络连接可以传输多个序列化对象,但是由于tcp字节流是无边界的字节流,故要表明各个传输来的序列化子节序的长度,故我们可以将序列化对象长度作为所要传递失望序列化对象的前缀进行传输。长度值我们可以先试用pack进行编码,接收端试用upack解码,然后依照此长度进行读取。
实例代码如下:
def makePickle(self, record): """ Pickles the record in binary format with a length prefix, and returns it ready for transmission across the socket. """ ei = record.exc_info if ei: # just to get traceback text into record.exc_text ... dummy = self.format(record) record.exc_info = None # to avoid Unpickleable error # See issue #14436: If msg or args are objects, they may not be # available on the receiving end. So we convert the msg % args # to a string, save it as msg and zap the args. d = dict(record.__dict__) d['msg'] = record.getMessage() d['args'] = None s = cPickle.dumps(d, 1) if ei: record.exc_info = ei # for next handler slen = struct.pack(">L", len(s)) return slen + s
相关文章推荐
- [leetcode] Insertion Sort List(python)
- 基于Python Django技术构建web系统实践
- python脚本:计算某个目录下Code行数
- python学习小记0
- Python练习(4):牛顿拉复生算法求解根
- 使用Python和Perl绘制北京跑步地图
- python的命令模式和编辑模式
- 和python库有关的网址
- python---matplotlib安装、networkx的使用
- hello,world! python
- flask源码笔记:四,总结
- vim+python+OpenCV学习五 : 直方图的计算与显示
- python学习1
- flask源码笔记:二,Flask源码目录结构
- Python基础回顾之-格式化字符串
- flask源码笔记:一,阅读Flask源码前的准备工作
- Ipython
- Python学习记录(六)
- python多线程threading.Lock锁实例
- python 控制vbox虚拟机