我想挑选用snappy-python压缩的对象。因为这些对象很大,我想使用流媒体 - 即pickle.dump,而不是pickle.dumps。
不幸的是,snappy和pickle API似乎并不特别兼容:
snappy.stream_compress(src, dst, blocksize=65536)
pickle.dump(obj, file, protocol=None)
有关snappy.stream_compress(pickle.dump_magic(obj), dst)
类似pickle.dump(obj, dst)
今天所做的工作需要什么样的魔力的想法?
答案 0 :(得分:1)
最简单的方法是pickle.dump
到文件,然后snappy.stream_compress
文件。
def snappy_pickle_dump(obj, f):
tmpf = ...
with open(tmpf, 'wb') as F:
pickle.dump(obj, F)
with open(f, 'wb') as OUT:
with open(tmpf, 'rb') as IN:
snappy.stream_compress(IN, OUT)
os.remove(tmpf)
如果必须避免存储整个未压缩转储,则可以将一个线程pickle.dump
对象放入StringIO
对象,另一个线程snappy.stream_compress
。