1

snappy-pythonで圧縮されたオブジェクトをピクルしたい。これらのオブジェクトは大きいため、何かストリーミングを使用したいと考えています。つまり、pickle.dumps ではなく pickle.dump です。

残念ながら、snappy API と 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)ますか?

4

1 に答える 1

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)

圧縮されていないダンプ全体を格納することを避ける必要がある場合は、1 つのスレッドでオブジェクトをオブジェクトに変換し、別のスレッドでpickle.dumpオブジェクトを変換することができます。StringIOsnappy.stream_compress

于 2013-03-28T20:07:39.177 に答える