Python实现大文件压缩

13

我想使用Python压缩大文本文件(指大小超过20GB的文件)。 我并不是专家,所以我试图收集我找到的信息,以下似乎有效:

import bz2

with open('bigInputfile.txt', 'rb') as input:
    with bz2.BZ2File('bigInputfile.txt.bz2', 'wb', compresslevel = 9) as output:
        while True:
            block = input.read(900000)
                if not block:
                    break
                output.write(block)

input.close()
output.close()
我想知道这个语法是否正确,是否有优化的方法?我有一种感觉在这里漏掉了什么。
非常感谢。

2
你遇到了什么问题?你输出的文件正确吗? - Daenyth
1
你为什么选择以900000的速度阅读? - n1r3
是的,看起来未压缩大小对应且格式看起来没问题。我对自己编写的所有代码都没有信心,因为我是自学Python(和IT)的。谢谢。是的,我选择考虑bzip2使用的块的大小,我想一个块压缩一次更好,这是错误的吗? - user1242959
2个回答

19

你的脚本似乎是正确的,但可以缩短:

from shutil import copyfileobj

with open('bigInputfile.txt', 'rb') as input:
    with bz2.BZ2File('bigInputfile.txt.bz2', 'wb', compresslevel=9) as output:
        copyfileobj(input, output)

谢谢!那么你的意思是块大小的定义不是必要的吗? - user1242959
1
是的。copyfileobj 默认按16kB块复制;如果需要,仍然可以通过添加第三个参数来设置块大小。 - Fred Foo
关于块大小:它可能不会对处理时间或压缩比产生很大影响,因此除非您需要真正挤出最后一点,否则最好将其保留在默认设置上。 - fantabolous
一个优雅的Python示例。 - Adam Matan

0
为什么要调用 .close() 方法呢? 使用 with 语句时是不需要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接