from __future__ import with_statement # Only for Python 2.5
import bz2,json,contextlib
hugeData = {'key': {'x': 1, 'y':2}}
with contextlib.closing(bz2.BZ2File('data.json.bz2', 'wb')) as f:
json.dump(hugeData, f)
按如下方式加载:
from __future__ import with_statement # Only for Python 2.5
import bz2,json,contextlib
with contextlib.closing(bz2.BZ2File('data.json.bz2', 'rb')) as f:
hugeData = json.load(f)
可以使用bzip2压缩数据:
按如下方式加载:
您还可以使用zlib或gzip使用几乎相同的接口压缩数据。然而,zlib和gzip的压缩率都将低于bzip2(或lzma)的压缩率。
在实现数据序列化时,Python代码会非常慢。 如果您尝试在纯Python中创建一个与Pickle等价的工具,您将看到它将非常慢。 幸运的是,执行这些功能的内置模块非常好。
除了
cPickle
,您还可以找到marshal
模块,它的速度要快得多。 但它需要一个真正的文件句柄(不是来自类似文件的对象)。 你可以import marshal as Pickle
看到区别。 我不认为你能做一个定制的序列化程序比这个快得多。。。这是一个实际的(不太老的)serious benchmark of Python serializers
当然这是可能的,但是没有理由尝试在内存中创建一个显式的压缩副本(它可能不适合!)在编写之前,当您可以使用内置的标准库功能自动使它在编写时被压缩时,;)
见http://docs.python.org/library/gzip.html。基本上,你可以用
然后像用
open(...)
(或者file(...)
)创建的普通file
一样使用它。相关问题 更多 >
编程相关推荐