Сжатие больших файлов с помощью Python - PullRequest
12 голосов
/ 01 марта 2012

Я хочу сжать большие текстовые файлы с помощью 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 ]

18 голосов
/ 01 марта 2012

Ваш сценарий кажется правильным, но его можно сократить:

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)
0 голосов
/ 01 марта 2012

Почему вы вызываете методы .close ()?Они не нужны, так как вы используете оператор with:

...