python struct、json、pickle模块

(1)json模块

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






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值