README English | JSON Specs | MsgPack Specs | Python Docs: Pickle
此库可以用来方便地序列化并压缩/去序列化并解压缩
数据,并且可以被用在各样的环境下。
用户/程序员可以方便地将Python程序中的数据序列化并压缩,并且可以将结果以blob
的类型存入数据库中,存入redis
或memcached
服务器上,或者进行跨程序信息交换。
如果您要安装,请执行pip install SeCo
指令;然后将from seco import SeCo
import命令和seco = SeCo()
实例化命令添加到您的程序中来使用SeCo
库。
目前最好的组合是
msgpack
和zlib
,此组合运行速度快并且最终结果很省空间。但是目前作为默认的组合是json
和zlib
因为在大多数情况下够用了。
本包默认的
json
序列器实际上使用了simplejson
因为在Python 3.5环境下核心json
包不支持bytes
作为信息源来处理。
但是,众所周知的是,没有一个序列器或压缩器是完美的,请根据实际情况选择。
json
并不能处理bytes
或者bytearray
类型的数据;json
和msgpack
两者都不能处理如set
,frozenset
类的数据。对Python数据类型兼容性最广的是pickle
模块,但是要注意的是pickle
序列化的结果通常很大,而且不兼容其他语言。
zlib
比bz2
要快(很多),但通常情况下压缩效率并不如bz2
;gzip
模组的压缩效率和速度都介于zlib
和bz2
之间。Python 3环境下还有lzma
模块可以用作压缩,但是该模块并不存在于Python 2环境,并且压缩速度很不理想,但是lzma
压缩效率却非常惊人。当然用户可以很方便地根据实际情况改变序列器和压缩器。
通过pip install SeCo
安装之后,用户可以方便地执行from seco import SeCo
。SeCo
是本模块提供的唯一类,可被用作序列化并压缩/去序列化并解压缩
操作。为了提供对Python习俗的兼容,本类提供了如: loads
, dumps
, load
, dump
等方法,并且实现了__call__
魔术方法来让用户快速操作数据.
头: SeCo(serialize = None, compress = None)
提供两个可选的参数来创建一个所需要的实例。
-
serialize = None
: 第一个参数,可选(None, 'json', 'msgpack', 'pickle')
中任意一个。 -
compress = None
: 第二个参数,可选(None, 'zlib', 'gzip', 'bz2', 'lzma')
中任意一个。
from seco import SeCo
import json, lzma
# 使用默认的序列器和压缩器
seco = SeCo() # `json` and `zlib`
# 使用其他的序列器和压缩器
seco = SeCo('msgpack', 'bz2')
seco = SeCo('pickle', 'zlib')
# 序列化并压缩数据
# uses __call__ method, the second parameter is the `switch`
seco({'test': 'case'}) # `bytes` object returned
seco({'test': 'case'}, True) # `bytes` object returned, the same
seco(seco({'test': 'case'}), False) # decompress, {'test': 'case'}
# Python习俗
seco.dumps(100) # `bytes` object
seco.loads(seco.dumps(100)) # 100 returned
seco.dump([1,2,3,4,5], open('test', 'wb'))
seco.load(open('test', 'rb')) # [1,2,3,4,5]
# 获取或改变序列器和压缩器
ser = seco.serializer # access the serializer
seco.serializer = json # change to json
com = seco.compressor # access the compressor
seco.compressor = lzma # change to lzma