Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以让pickle.dump公开类似文件的对象吗?_Python_Pickle - Fatal编程技术网

Python 我可以让pickle.dump公开类似文件的对象吗?

Python 我可以让pickle.dump公开类似文件的对象吗?,python,pickle,Python,Pickle,我想把我的东西用压缩过的泡菜腌制一下。因为这些对象很大,所以我想使用流式处理——即pickle.dump,而不是pickle.dumps 不幸的是,snappy和pickle API似乎并不特别兼容: snappy.stream_compress(src, dst, blocksize=65536) pickle.dump(obj, file, protocol=None) 有没有想过我需要什么样的魔法来实现像snappy.stream\u压缩(pickle.dump\u magic(obj,

我想把我的东西用压缩过的泡菜腌制一下。因为这些对象很大,所以我想使用流式处理——即pickle.dump,而不是pickle.dumps

不幸的是,snappy和pickle API似乎并不特别兼容:

snappy.stream_compress(src, dst, blocksize=65536)
pickle.dump(obj, file, protocol=None)

有没有想过我需要什么样的魔法来实现像
snappy.stream\u压缩(pickle.dump\u magic(obj,dst)
这样的东西,才能像今天的
pickle.dump(obj,dst)
一样工作?

最简单的方法是
pickle.dump
到一个文件,然后
snappy.stream\u压缩文件

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\u压缩它。

最简单的方法是
pickle.dump
到文件中,然后
snappy.stream\u压缩文件

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
对象中,另一个线程
snapy.stream\u压缩它。

我同意这可能是最简单的,但如果可能的话,最好避免额外的读/写过程我同意这可能是最简单的,但如果可能的话,最好避免额外的读/写过程(可能是线程化,因为这部分应该主要是IO绑定的)。