В этом уроке мы узнаем, как можно использовать Python gzip модуль для чтения и записи в сжатые файлы в Python. Самая большая функция, которую предоставляет нам этот модуль, заключается в том, что мы можем рассматривать сжатые файлы как обычные объекты File, что избавляет нас от сложности управления файлами и их жизненным циклом в нашем коде и позволяет нам сосредоточиться на основной бизнес-логике программы.В gzip модуль предоставляет нам почти те же функции, что и программы GNU, такие как распаковать а также gzip.
Запись сжатых файлов с помощью open ()
Мы начнем с базового примера, в котором мы можем создать файл gzip и записать в него некоторые данные. Для этого нам нужно создать файл и открыть его в режиме записи, чтобы в него можно было вставить данные. Давайте посмотрим на пример программы, с помощью которой мы можем записывать данные в файл gzip:
импортировать gzipimport io
импорт ОС
output_file = 'linxhint_demo.текст.gz '
write_mode = 'WB'
с gzip.open (output_file, write_mode) как вывод:
с io.TextIOWrapper (output, encoding = 'utf-8') как кодировать:
кодировать.write ('Мы можем записать в файл все, что захотим.\ n ')
печать (выходной_файл,
'содержит', os.stat (выходной_файл).st_size, 'байты')
Операционные системы.система ('файл -b --mime '.формат (выходной_файл))
Вот что мы получаем с помощью этой команды:
Запись в zip-файл
Если вы теперь посмотрите на структуру папок, в которой вы выполнили этот скрипт, должен появиться новый файл с именем, которое мы предоставили в нашей программе выше.
Запись нескольких строк в сжатый файл
Мы также можем записать несколько строк или фактически любое количество строк в наш файл gzip очень похожим образом, как мы это делали в предыдущем примере. Чтобы сделать этот пример другим, мы также будем использовать модуль itertools. Посмотрим на пример программы:
импортировать gzipimport io
импорт ОС
импортировать itertools
output_file = 'linxhint_demo.текст.gz '
write_mode = 'WB'
с gzip.open (output_file, write_mode) как вывод:
с io.TextIOWrapper (вывод, кодировка = 'utf-8') как код:
приложить.письма (
itertools.repeat ('LinuxHint, повторение той же строки!.\ n ', 10)
)
Операционные системы.система ('gzcat linxhint_demo.текст.gz ')
Посмотрим, что выводит эта команда:
Написание нескольких строк
Чтение сжатых данных
Мы также можем прочитать сжатый файл, который мы создали в последнем примере, с помощью модуля gzip с очень простым вызовом открыто функция:
импортировать gzipimport io
импорт ОС
file_name = 'linxhint_demo.текст.gz '
file_mode = 'rb'
с gzip.открыть (имя_файла, режим_файла) как файл_входа:
с io.TextIOWrapper (input_file, encoding = 'utf-8') как dec:
печать (декабрь.читать())
Вот что мы получаем с помощью этой команды:
Чтение файла gzip
Чтение потоков
Из-за того, что текстовые файлы могут быть очень большими по размеру, разумно открывать эти файлы в потоке, а не загружать весь файл в одном объекте, который занимает много системной памяти и в некоторых случаях может даже вызвать процесс. полностью рухнуть. Давайте посмотрим на пример программы, которая считывает данный сжатый файл в потоке:
импортировать gzipиз io импорт BytesIO
импорт binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Повторенная строка x раз.\ n '* 8
print ('Несжатые данные:', len (несжатые))
печать (без сжатия)
buf = BytesIO ()
с gzip.GzipFile (mode = mode_write, fileobj = buf) как файл:
файл.написать (без сжатия)
сжатый = buf.getvalue ()
print ('Сжатые данные:', len (сжатые))
печать (binascii.hexlify (сжатый))
in_buffer = BytesIO (сжатый)
с gzip.GzipFile (mode = mode_read, fileobj = in_buffer) как файл:
read_data = файл.читать (len (несжатый))
print ('\ nЧитаем снова:', len (read_data))
печать (прочитанные_данные)
Посмотрим, что выводит эта команда:
Чтение файла gzip в потоке
Хотя программа была немного длинной, на самом деле мы просто использовали модули Python, чтобы открыть файл и передать содержимое на консоль с помощью буферизованного объекта чтения.
Заключение
В этом уроке мы рассмотрели, как мы можем использовать модуль Python gzip для сжатия и распаковки файлов в Python. Самая большая особенность, которую предоставляет нам эта библиотека, заключается в том, что мы можем рассматривать сжатые файлы как обычные объекты File.
Прочтите больше сообщений на основе Python здесь.