Как открыть gz файл python

Обновлено: 07.07.2024

Модуль обеспечивает простой интерфейс для сжатия и распаковки файлов так же, как программы GNU gzip и gunzip.

Сжатие данных обеспечивается модулем zlib .

Модуль gzip обеспечивает класс GzipFile , а также функции удобства open() , compress() и decompress() . Класс GzipFile читает и пишет gzip-файлы формата, автоматически сжимая или развертывая данные так, чтобы это было похоже на обычный файловый объект .

Обратите внимание, что дополнительные форматы файлов, которые могут быть распакованы программами gzip и gunzip, например, создаваемые программами compress и pack, не поддерживаются этим модулем.

Модуль определяет следующие элементы:

gzip. open ( filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None ) ¶

Открыть сжатый gzip файл в двоичном или текстовом режиме, возвращая файловый объект .

Аргументом filename может быть фактическое имя файла (объект str или bytes ) или существующий объект файла для чтения или записи.

Аргумент mode может быть любым из 'r' , 'rb' , 'a' , 'ab' , 'w' , 'wb' , 'x' или 'xb' для двоичного режима или 'rt' , 'at' , 'wt' или 'xt' для текстового режима. Значение по умолчанию - 'rb' .

Аргумент compresslevel является целым числом от 0 до 9, как для конструктора GzipFile .

Для двоичного режима эта функция эквивалентна конструктору GzipFile : GzipFile(filename, mode, compresslevel) . В этом случае аргументы encoding, errors и newline не должны быть предоставлены.

Для текстового режима создается объект GzipFile , который помещается в io.TextIOWrapper сущность с указанным кодировка, поведением обработки ошибок и окончанием строки.

Изменено в версии 3.3: Добавлена поддержка filename как объекта файла, поддержка текстового режима и аргументов encoding, errors и newline.

Изменено в версии 3.4: Добавлена поддержка режимов 'x' , 'xb' и 'xt' .

Изменено в версии 3.6: Принимает путеподобный объект .

Возникло исключение для недопустимых файлов gzip. Он наследует OSError . EOFError и zlib.error также могут быть подняты для недопустимых файлов gzip.

Добавлено в версии 3.8.

class gzip. GzipFile ( filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None ) ¶

Конструктор для класса GzipFile , который моделирует большинство методов файлового объекта , за исключением метода truncate() . Хотя бы одному из fileobj и filename должен быть дан нетривиальный значение.

Новый класс сущность основан на fileobj, который может быть обычным файлом, объектом io.BytesIO или любым другим объектом, имитирующим файл. По умолчанию устанавливается значение None , и в этом случае открывается filename для предоставления объекта файла.

Когда fileobj не None , аргумент filename - только используемый, который будет включен в заголовок файла gzip, который может включать оригинальное имя файла несжатого файла. По умолчанию используется имя файла fileobj, если его можно различить; иначе это не выполняет своих обязательств к пустому строка, и в этом случае оригинальное имя файла не включено в заголовок.

Аргумент mode может быть любым из 'r' , 'rb' , 'a' , 'ab' , 'w' , 'wb' , 'x' или 'xb' , в зависимости от того, будет ли файл считан или записан. По умолчанию используется режим fileobj, если его можно различить; в противном случае значение по умолчанию равно 'rb' .

Обратите внимание, что файл всегда открывается в двоичном режиме. Чтобы открыть сжатый файл в текстовом режиме, используйте команду open() (или оберните GzipFile io.TextIOWrapper ).

Аргумент compresslevel представляет собой целое число от 0 до 9 , контролирующее уровень сжатия; 1 быстрее и производит наименьшее сжатие, а 9 медленнее и производит наибольшее сжатие. 0 отсутствует сжатие. Значение по умолчанию - 9 .

Аргумент mtime - это необязательная числовая временная метка, которая записывается в последнее поле времени изменения в потоке при сжатии. Она должна предоставляться только в режиме сжатия. Если пропущено или None , текущее время равно используемый. Дополнительные сведения см. в разделе mtime атрибут.

Запрос метода объекта GzipFile close() не закрывает fileobj, так как вы могли бы хотеть приложить больше материала после сжатых данных. Это также позволяет вам передавать объект io.BytesIO , открытый для написания как fileobj и восстанавливать получающийся буфер памяти использование метода объекта io.BytesIO getvalue() .

GzipFile поддерживает интерфейс io.BufferedIOBase , включая итерацию и with инструкцию. Не реализован только метод truncate() .

GzipFile также предоставляет следующий способ и атрибут:

Прочитать несжатые байты n, не продвигая позицию файла. Самое большее одно считывание в сжатом потоке выполняется для удовлетворения вызова. Число байтов возвращенный может быть больше или меньше запрошенного.

В то время как вызов peek() не меняет положение файла GzipFile , это может сменить положение основного объекта файла (например, если GzipFile был построен с параметром fileobj).

Добавлено в версии 3.2.

При распаковке значение последнего поля времени модификации в последнем считанном заголовке может быть считан из этого атрибут как целое число. Начальный значение перед чтением заголовков является None .

Сжатые потоки всего gzip обязаны содержать это поле метки времени. Некоторые программы, такие как gunzip, используют временную метку. Формат совпадает с форматом возвращает значение time.time() и st_mtime атрибут объекта возвращенный по os.stat() .

Изменено в версии 3.1: Поддержка with инструкция была добавлена, наряду с аргументом конструктора mtime и mtime атрибут.

Изменено в версии 3.2: Добавлена поддержка файлов, заполненных нулем, и файлов, не пригодных для заполнения.

Изменено в версии 3.3: Метод io.BufferedIOBase.read1() теперь реализован.

Изменено в версии 3.4: Добавлена поддержка режимов 'x' и 'xb' .

Изменено в версии 3.5: Добавлена поддержка написания произвольных байтоподобных объектов . Метод read() теперь принимает аргумент None .

Изменено в версии 3.6: Принимает путеподобный объект .

Сожмите data, возвратив объект bytes , содержащий сжатые данные. compresslevel и mtime имеют то же значение, что и в конструкторе GzipFile выше.

Добавлено в версии 3.2.

Изменено в версии 3.8: Добавлен параметр mtime для воспроизводимого вывода.

Распаковать data, возвращая объект bytes , содержащий несжатые данные.

Добавлено в версии 3.2.

Примеры использования¶

Пример чтения сжатого файла:

Пример создания сжатого файла GZIP:

Пример сжатия существующего файла в GZIP:

Пример сжатия двоичного строка в GZIP:

Модуль zlib базовый модуль сжатия данных, необходимый для поддержки формата файла gzip.

Интерфейс командной строки¶

Модуль gzip предоставляет простой интерфейс командной строки для сжатия или распаковки файлов.

После выполнения модуль gzip сохраняет входные файлы.

Изменено в версии 3.8: Добавление нового интерфейса командной строки с использованием. По умолчанию при выполнении интерфейса командной строки уровень сжатия по умолчанию равен 6.

Если вы пользовались компьютером хоть немного, то возможно вам встречались файлы с расширением .zip. Это специальные файлы в которые могут содержать в сжатом состоянии большое количество других файлов, директорий и поддиректорий. Это делает их очень удобными для передачи данных через интернет. А знаете ли вы, что вы можете использовать Python для сжатия и распаковки архивов?

В этом уроке вы научитесь как использовать библиотеку zipfile, чтобы извлекать или упаковывать один или сразу несколько файлов в архив.

Сжатие Одиночных Файлов

Это очень просто, и потребует написать совсем немного кода. Начинаем с того, что импортируем модуль zipfile и затем инициируем объект ZipFile с возможностью записи, указав это с помощью второго параметра 'w'. Первый параметр, это путь к файлу. Вот код, который нам нужен:

Пожалуйста, обратите внимание, что я буду указывать путь во всех фрагментах кода в формате для Windows; если вы работаете на Linux или Mac, вам нужно будет внести соответствующие изменения.

Вы можете указать различные методы сжатия, что бы заархивировать файл. В Python версии 3.3 были добавлены новые методы BZIP2 и LZMA , а также некоторые другие инструменты, которые не поддерживают эти два метода сжатия. По этой причине безопасно использовать метод DEFLATED . Но вам все же стоит попробовать эти методы, что бы увидеть разницу в размерах сжатого файла.

Сжатие Нескольких Файлов

Это будет чуть сложнее, так как вы должны выполнить итерационный процесс для всех файлов. Код показанный ниже должен заархивировать все файлы в директории с расширением pdf.

На этот раз нам необходимо импортировать модуль os и использовать метод walk() , чтобы пробежаться про всем файлам и поддиректориям в нашей основной директории. Я архивирую только файлы с расширением pdf. Вы так же можете создавать различные архивные файлы для разных форматов файлов используя оператор if .

Если вы не хотите, сохранить структуру каталога, вы можете положить все файлы вместе, используя следующую строку:

Метод write() допускает три параметра. Первый параметр - это имя нашего файла, который мы хотим сжать. Второй параметр не обязательный, он позволяет вам указать другое имя для файла архива. Если ничего не указано, будет использоваться имя архивируемого файла.

Извлечение Всех Файлов

Вы можете использовать метод extractall() для извлечения всех файлов и папок из zip-файла в текущую рабочую директорию. Вы можете также указать имя папки в extractall() для извлечения всех файлов и директорий в заданный каталог. Если директория, которую вы указали не существует, метод сам создаст новую. Вот код, который вы можете использовать для извлечения файлов:

Если вы хотите распаковать несколько файлов, вам необходимо подставить имена этих файлов в виде списка.

Извлечение Единичных Файлов

Это подобно извлечению нескольких файлов. Одно отличие состоит в том, что на этот раз, вам необходимо сначала подставить имя файла и затем, путь для извлечения. Кроме того необходимо использовать метод extract() вместо extractall() . Вот фрагмент кода для извлечения отдельных файлов.

Чтение Архивов

Рассмотрим сценарий, где вам нужно узнать содержит ли zip-архив конкретный файл. До этого момента, вы могли это сделать только распаковав весь архив. Аналогичным образом, может потребоваться извлечь только те файлы, которые больше, определенного размера. Модуль Zipfile позволяет нам узнать содержимое архива без его распаковки.

Применение метода namelist() к объекту ZipFile вернет список всех элементов архива по имени. Чтобы получить информацию о конкретном файле в архиве, можно использовать для ZipFile метод getinfo() . Это даст вам доступ к информации об этом файле, такой как, размер сжатого и несжатого файла или информацию о времени его последнего изменения. Мы вернемся к этому позже.

Вызов метода getinfo() для каждого файла может быть утомительным процессом, когда этих файлов много. В этом случае можно использовать метод infolist() для возврата списка всех элементов, содержащихся в объекте ZipInf. Порядок этих объектов в списке такой же, как и в zip-файлах.

Вы можете также непосредственно прочитать содержимое определенного файла из архива, с помощью метода read(file) , где file — имя файла, который вы хотите прочесть. Для этого, архив должен быть открыт в режиме чтения или в режиме добавления.

Чтобы получить размер конкретного сжатого файла из архива, нужно использовать атрибут compress_size . Аналогично чтобы узнать, несжатый размер, можно использовать атрибут file_size .

Следующий код использует свойства и методы, которые мы только что обсудили, чтобы извлечь только те файлы, размер которых менее 1 МБ.

Чтобы узнать время и дату последнего изменения определенного файла из архива, можно использовать атрибут date_time . Это возвращает кортеж из шести величин. Этими величинами будут год, месяц, день месяца, часы, минуты и секунды, в установленном порядке. Год будет всегда больше или равен 1980 года и часы, минуты и секунды от нуля.

Информация об оригинальном размере файла и размере сжатого файла может помочь вам увидеть, принесло ли архивирование пользу. Я думаю, это может быть так же использовано и в других случаях.

Заключительные мысли

Как видно из этого урока, использование модуля zipfile, позволяет вам гибко использовать сжатие файлов. Вы можете архивировать файлы в директории в различные архивы в зависимости от их типа, имени и размера. Вы так же можете решать оставлять вам структуру директории или нет. Аналогично при извлечении файлов, вы можете извлекать их куда вам нужно, на основе собственных критериев, таких как размер, и т.д.

Если честно, мне было очень интересно архивировать и извлекать файлы пока я писал свой код. Я надеюсь урок был вам полезен, и если у вас остались какие-то вопросы, пишите их пожалуйста в комментариях.

Python Gzip-это приложение, которое используется для сжатия и распаковки файлов. open(): Он может открыть любой сжатый текстовый или двоичный файл.

Привет, кодеры!! В этой статье мы узнаем о python gzip вместе с некоторыми подробными примерами. Сначала мы должны понять, что означает термин gzip? Gzip-это приложение, которое используется для сжатия и распаковки файлов. Он имеет простой интерфейс в приложении python GZip, что делает его более эффективным и простым в использовании. Не теряя больше времени, давайте подробно познакомимся с модулем python gzip.

Функции, присутствующие в модуле Python gzip:

1) открыть():

Он может открыть любой сжатый текстовый или двоичный файл. Он возвращает файл как объект.

2)сжатие():

Он используется для сжатия данных. Эта функция возвращает байтовый объект. По умолчанию уровень сжатия установлен на уровне 9.

3)распаковать():

Он используется для распаковки данных и возвращает байты распакованных данных.

  • данные – Данные, которые необходимо распаковать.

Интерфейс командной строки Python Gzip:

Интерфейс командной строки для python gzip

Примеры для понимания Python gzip:

Пример 1: Создание сжатого файла gzip:

smple.txt файл, созданный в текущем каталоге

Пример 2: Чтение сжатого файла:

Выполнив эту команду, мы сможем прочитать содержимое вашего сжатого файла gzip sample.txt

Пример 3: Сжатие существующего файла

  • В этом случае мы сначала открыли существующий файл sample1.txt
  • После этого мы скопировали его содержимое в переменную data
  • Затем мы преобразовали его в байтовый массив
  • Наконец, мы сжали данные в sample2.txt

Сжатый файл sample2.txt создано по образцу 1

Пример 4: Сжатие двоичной строки:

Преимущества Python Gzip:

  • gzip чрезвычайно прост в использовании
  • Экономит пропускную способность
  • Уменьшает время передачи
  • Увеличивает скорость отклика

Недостатки Python Gzip:

  • Немного увеличивает нагрузку на сервер, так как сжатие и декомпрессия требуют циклов процессора

Должен Читать

  • Python int to Binary | Integer to Binary Преобразование
  • Реализация бинарного поиска в Python
  • Работа С текстом Matplotlib в Python
  • Преобразование текстового файла в PDF С помощью Python | PDF
  • Модуль Python Nmap Полностью объяснен с помощью программ

Вывод:

В этой статье мы узнали о модуле python gzip и о том, как он помогает нам различными способами. Мы также видели различные примеры, чтобы узнать, как мы можем реализовать их в нашей программе.

Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.

Если вы давно пользуетесь компьютером, то наверняка сталкивались с файлами с расширением zip. Это специальные файлы, которые содержат сжатое содержимое многих других файлов, папок и подпапок, что делает их очень полезными для передачи файлов через Интернет. Знаете ли вы, что для сжатия и извлечения файлов можно использовать Python?

В этом уроке я покажу вам, как использовать модуль zipfile в Python для извлечения или сжатия как отдельных файлов, так и нескольких одновременно.

Сжатие отдельных файлов

При архивации файлов можно определить различные методы сжатия. Новые методы BZIP2 и LZMA были добавлены в Python в версии 3.3, но есть инструменты, которые не поддерживают эти два метода. Поэтому безопаснее всего использовать метод DEFLATED.

Сжатие нескольких файлов

Это немного сложнее, так как необходимо перебрать все файлы. Следующий код должен сжать все pdf-файлы в заданной папке:

Мы импортировали модуль os и использовали его метод walk() для проверки всех файлов и подпапок внутри нашей исходной директории. Я сжимаю только файлы pdf в каталоге. Вы можете создавать различные архивы для каждого формата с помощью операторов if.

Если вы не хотите сохранять структуру каталогов, вы можете собрать все файлы вместе с помощью следующей строки:

Распаковка всех файлов

Вы можете использовать метод extractall() для извлечения всех файлов и папок из zip-архива в текущий рабочий каталог. Вы также можете передавать имя папки в extractall() для извлечения всех файлов и папок в определенном каталоге. Если переданная вам папка не существует, этот метод создаст новую. Вот код, который вы можете использовать для извлечения файлов:

Распаковка отдельных файлов

Это очень похоже на извлечение нескольких файлов. Единственное отличие заключается в том, что сначала вы должны передать имя файла, а затем путь для дальнейшего извлечения. Кроме того, вы должны использовать метод extract() вместо extractall(). Вот базовый фрагмент кода для извлечения отдельных файлов.

Сохраните статью в социальных сетях, чтобы не потерять.

Похожие записи

Сравнивать даты в Python очень просто. Для этого достаточно использовать операторы сравнения. В этой статье…

JSON позволяет быстро и просто работать с несколькими данными: в различных приложениях и языках программирования.…

Читайте также: