Skip to content

Latest commit

 

History

History
64 lines (42 loc) · 3.46 KB

README.zh-CN.md

File metadata and controls

64 lines (42 loc) · 3.46 KB

SeCo Project

README English | JSON Specs | MsgPack Specs | Python Docs: Pickle

关于SeCo项目

此库可以用来方便地序列化并压缩/去序列化并解压缩数据,并且可以被用在各样的环境下。

用户/程序员可以方便地将Python程序中的数据序列化并压缩,并且可以将结果以blob的类型存入数据库中,存入redismemcached服务器上,或者进行跨程序信息交换。

如果您要安装,请执行pip install SeCo指令;然后将from seco import SeCo import命令和seco = SeCo()实例化命令添加到您的程序中来使用SeCo库。

选择序列器和压缩器

目前最好的组合是msgpackzlib,此组合运行速度快并且最终结果很省空间。但是目前作为默认的组合是jsonzlib因为在大多数情况下够用了。

本包默认的json序列器实际上使用了simplejson因为在Python 3.5环境下核心json包不支持bytes作为信息源来处理。

但是,众所周知的是,没有一个序列器或压缩器是完美的,请根据实际情况选择。

json并不能处理bytes或者bytearray类型的数据;jsonmsgpack两者都不能处理如set,frozenset类的数据。对Python数据类型兼容性最广的是pickle模块,但是要注意的是pickle序列化的结果通常很大,而且不兼容其他语言。

zlibbz2要快(很多),但通常情况下压缩效率并不如bz2gzip模组的压缩效率和速度都介于zlibbz2之间。Python 3环境下还有lzma模块可以用作压缩,但是该模块并不存在于Python 2环境,并且压缩速度很不理想,但是lzma压缩效率却非常惊人。当然用户可以很方便地根据实际情况改变序列器和压缩器。

SeCo类API文档

通过pip install SeCo安装之后,用户可以方便地执行from seco import SeCoSeCo是本模块提供的唯一类,可被用作序列化并压缩/去序列化并解压缩操作。为了提供对Python习俗的兼容,本类提供了如: loads, dumps, load, dump等方法,并且实现了__call__魔术方法来让用户快速操作数据.

头: SeCo(serialize = None, compress = None)

提供两个可选的参数来创建一个所需要的实例。

  1. serialize = None: 第一个参数,可选(None, 'json', 'msgpack', 'pickle')中任意一个。

  2. 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