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

Обновлено: 07.07.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Модуль zipfile в Python помогает нам в работе с zip файлами. Сегодня мы узнаем, как читать детали zip-архива, создавать и распаковывать с помощью модуля zipfile.

Модуль zipfile важен даже для промышленного приложения. Это связано с тем, что на серверах файлы, загружаемые через веб-приложения, часто архивируются, а затем сохраняются для экономии места на сервере. Начнем с примеров модуля zipfile. Этот модуль также похож на модуль tarfile.

Обратите внимание, что в демонстрационных целях у нас есть ZIP-файл с именем Archive.zip с некоторыми текстовыми файлами, и этот ZIP-файл находится в каталоге, в котором мы запускаем программы.

Чтение ZIP-файла

Мы начнем с перечисления файлов, находящихся в ZIP-архиве. Вот пример программы:

Посмотрим на результат этой программы:

Чтение ZIP-файла

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

Создание ZIP-файла

Далее мы начнем с того, что посмотрим, как можно создать ZIP-файл. Чтобы создать новый архив, мы создадим экземпляр ZipFile с режимом w. Обратите внимание: если файл с таким же именем существует, он будет полностью усечен. Итак, убедитесь, что имя вашего файла уникально.

Давайте посмотрим на фрагмент кода для создания zip-файла с помощью модуля zipfile:

Посмотрим на результат этой программы:

Создание ZIP-файла

Проверка правильности

Мы также можем проверить, является ли указанный файл действительным ZIP-архивом. Вот пример программы:

Давайте посмотрим на результат этой программы:

Проверка правильности файла ZIP

Это важный тест, который необходимо выполнить при работе с ZIP-архивами.

Распаковка ZIP-архива

Посмотрим на фрагмент кода:

Давайте посмотрим на результат этой программы:

Распаковка ZIP-архива

Обратите внимание, что новый каталог не создается, а файлы помещаются в тот же каталог. Укажите каталог, если вы хотите разместить файлы в определенном месте.

Добавление файла с другим именем

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

Посмотрим на результат этой программы:

Добавление файла в ZIP с другим именем

Заключение

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

Я прочитал документацию zipfile , но не мог понять, как разархивировать файл, только как сжать файл. Как мне разархивировать все содержимое zip файла в один и тот же каталог?

Это в значительной степени это!

Если вы используете Python 3.2 или более поздней версии:

Вам не нужно использовать функцию close или try/catch, поскольку она использует конструкцию менеджера контекста.

Используйте метод extractall , если вы используете Python 2.6 +

Вы также можете импортировать только ZipFile :

Работает в Python 2 и Python 3.

Это рекурсивное решение для ZIP и RAR:

для поддержки RAR вам необходимо установить пакеты python для unrar и rarfile.

Вы еще не закончили, теперь вы также должны вручную установить unrar для Windows и Linux.

Обычно расположение это:

Добавьте этот путь в ваши переменные пути Windows. потому что этот путь будет путём инструмента unrar, который будет использоваться во время извлечения файла RAR.

Если все настроено, вы готовы к развертыванию.

Не паникуйте, это длинный сценарий, разделенный в основном на четыре части.

Часть 1

Убедитесь, что вы правильно установили переменную path. Этот раздел не обязателен, если вы не хотите работать с файлом RAR.

Часть 2

Часть 3

Эта функция извлекает файл RAR. Почти так же, как почтовый индекс.

Часть 4

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

Проблемы, которые все еще присутствуют.

  • Это решение не может извлечь все типы файлов RAR.
  • Хотя он проходит проверку rarfile.is_rarfile("filename")

Я проверил RAR, созданный WinRAR, он выдает предупреждение и не извлекает файлы.

[Пожалуйста, прокомментируйте, если вы можете помочь в отношении этого предупреждения и isuue]

Но он может легко извлечь тип RAR4.

Это не содержит проверки для файла, если это не zip. Если папка содержит не.zip файл, это не сработает.

Я ищу способ чтения определенных файлов из архива rar в память. В частности, это коллекция пронумерованных файлов изображений (я пишу комический ридер). Хотя я могу просто unrar эти файлы и загрузить их по мере необходимости (удаление их, когда сделано), я бы предпочел избежать этого, если это возможно.

все сказанное, я бы предпочел решение, которое является кросс-платформенным (Windows/Linux), если это возможно, но Linux является обязательным. Так же важно, если вы собираетесь указать на библиотеку, чтобы ручка это для меня, пожалуйста, поймите, что это должно быть бесплатно (как в пиве) или ОСС.

реальный ответ заключается в том, что библиотеки нет, и вы не можете ее сделать. Вы можете использовать rarfile, или вы можете использовать 7zip unRAR (который менее свободен, чем 7zip, но все еще свободен, как в beer), но оба подхода требуют внешнего исполняемого файла. Лицензия на RAR в основном требует этого, так как, хотя вы можете получить исходный код для unRAR, вы не можете изменить его каким-либо образом, и превращение его в библиотеку будет представлять собой незаконную модификацию.

кроме того, solid RAR archives (лучший сжатый) доступ к нему не может быть случайным, так что вам все равно придется разархивировать все. WinRAR представляет пользовательский интерфейс, который, похоже, избегает этого, но на самом деле это просто распаковка и переупаковка архива в фоновом режиме.

см. модуль rarfile:

похоже, что ограничение, которое rarsoft накладывает на производные работы, заключается в том, что вы не можете использовать исходный код unrar для создания вариации RAR сжатие. Из контекста может показаться, что он специально позволяет людям использовать его код (измененный или нет) для распаковки файлов, но вы не можете использовать их, если собираетесь написать свой собственный код сжатия. Вот прямая цитата из лицензии.txt файл, который я скачал:

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

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

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

вам намного лучше использовать ZIP; это совершенно бесплатно, имеет точную общедоступную спецификацию, библиотека сжатия доступна везде (zlib-одна из самых широко развернутых библиотек в мире), и ее очень легко кодировать.

на pyUnRAR2 библиотека может извлекать файлы из архивов RAR в память (и диск, если вы хотите). Он доступен под лицензией MIT и просто обертывает UnRAR.dll в Windows и unrar в Unix. Нажмите "QuickTutorial" для примеров использования.

в Windows он может извлекать в память (а не на диск) с помощью (включенного) UnRAR.dll путем установки обратного вызова с помощью RARSetCallback() , а затем вызова RARProcessFile () с параметром RAR_TEST вместо параметра RAR_EXTRACT чтобы избежать извлечения файлов на диск. Обратный вызов затем наблюдает за событиями UCM_PROCESSDATA для чтения данных. Из документации по событиям UCM_PROCESSDATA: "обработать распакованные данные. Он может использоваться для чтения файла во время его извлечения или тестирования без фактического извлечения файла на диск."

в Unix unrar может просто распечатать файл в stdout, поэтому библиотека просто читает из трубы, подключенной к stdout unrar. Unrar binary вам нужен тот, который имеет "p" для " Print команда "файл в stdout". Используйте "apt-get install unrar", чтобы установить его на Ubuntu.

на в 7-Zip бесплатная библиотека также способен обрабатывать файлы RAR.

посмотрите на модуль Python "struct". Затем вы можете интерпретировать формат файла RAR непосредственно в своей программе Python, позволяя вам извлекать содержимое внутри RAR без зависимости от внешнего программного обеспечения, чтобы сделать это за вас.

EDIT: это, конечно, vanilla Python - есть альтернативы, которые используют сторонние модули (как уже опубликовано).

EDIT 2: Согласно Википедии мой ответ потребует от вас разрешения от автор.

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