Большое сжатие файлов с помощью python

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

Мне интересно, правильный ли этот синтаксис и есть ли способ его оптимизировать? У меня создалось впечатление, что я здесь что-то не хватает.

Большое спасибо.

Ответ 1

Ваш script кажется правильным, но может быть сокращен:

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)

Ответ 2

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