增量压缩和一次性压缩有什么区别?

2024-04-19 05:10:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python中使用bz2和/或{}包。我试图压缩csv格式的数据库转储,然后将其放入zip文件中。我用一次压缩两个包裹。在

代码如下所示:

with ZipFile('something.zip', 'w') as zf:
    content = bz2.compress(bytes(csv_string, 'UTF-8'))  # also with lzma
    zf.writestr(
        'something.csv' + '.bz2',
        content,
        compress_type=ZIP_DEFLATED
    )

当我尝试使用增量压缩时,它会创建一个.zip文件,当我试图提取时,它会不断递归地提供一些存档文件。在

代码如下所示:

^{pr2}$

我浏览了文档,还查找了有关压缩技术的信息,但似乎没有关于一次性压缩和增量压缩的全面信息。在


Tags: 文件csv代码信息数据库格式withcontent
1条回答
网友
1楼 · 发布于 2024-04-19 05:10:24

一次性和增量的区别在于,使用一次性模式,您需要在内存中保存整个数据;如果您要压缩一个100G的文件,您应该有大量的RAM。在

使用增量式编码器,你的代码可以一次给压缩程序输入1兆字节或1千字节,并将任何数据结果写入一个文件。另一个好处是您可以使用一个增量压缩器流式数据-您可以在所有未压缩数据可用之前开始写入压缩数据!在


您的第二个代码不正确,这将导致您丢失数据。flush还可能返回更多需要保存的数据。这里我在python3中压缩一个1000个'a'个字符的字符串;compress的结果是一个空字符串;实际的压缩数据是从flush返回的。在

>>> c = bz2.BZ2Compressor()
>>> c.compress(b'a' * 1000)
b''
>>> c.flush()
b'BZh91AY&SYI\xdcOc\x00\x00\x01\x81\x01\xa0\x00\x00\x80\x00\x08 \x00 
\xaamA\x98\xba\x83\xc5\xdc\x91N\x14$\x12w\x13\xd8\xc0'

因此,您的第二个代码应该是:

^{pr2}$

但实际上你还是在用一种非常复杂的方式进行单次压缩。在

相关问题 更多 >