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

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

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

2 ответов


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

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)

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