Как разархивировать файл с помощью python

Я могу разархивировать файл, если файл .zip, и разархивировать файл, если мой тип файла .rar. Как я могу сделать эту работу с python 2.7?


person 2 8    schedule 12.07.2013    source источник


Ответы (5)


Поздно, но я не был удовлетворен ни одним из ответов.

pip install patool
import patoolib
patoolib.extract_archive("foo_bar.rar", outdir="path here")

Работает на Windows и Linux без каких-либо дополнительных библиотек.

person Amir    schedule 03.10.2014
comment
Хорошая библиотека, но очень мало гибкости. Например, он не может перезаписывать файлы GZ. См. этот вопрос для получения более подробной информации: stackoverflow.com/questions/29631793/ - person multigoodverse; 27.04.2015
comment
Я попробовал вышеописанное и получил patoolib.util.PatoolError: could not find an executable program to extract format rar; candidates are (rar,unrar,7z), Если я правильно понимаю, мне нужна одна из утилит, что противоречит цели. - person some user; 11.12.2016

Попробуйте пакет pyunpack:

from pyunpack import Archive
Archive('a.zip').extractall('/path/to')
person Irakli Darbuashvili    schedule 12.07.2013
comment
это требует patool или некоторые другие? - person Basj; 31.01.2014
comment
да без него можно распаковать только zip файлы. посмотри в документации pyunpack ссылка которую я дал там все есть - person Irakli Darbuashvili; 07.02.2014

Хороший пакет для этого rarfile :

Информация и документы здесь:

https://pypi.python.org/pypi/rarfile/

https://rarfile.readthedocs.io/api.html

person Romibuzi    schedule 12.07.2013
comment
Если вы решили использовать rarfile, у вас могут возникнуть проблемы при попытке извлечь файл. Это связано с тем, что для извлечения используется инструмент UnRaR.exe с веб-сайта winrar (rarlab.com/rar_add.htm< /а>). Прямая ссылка для Windows: rarlab.com/rar/unrarw32.exe. Убедитесь, что у вас есть этот файл. Я положил его в C:\Python27\UnRar.exe. Отредактируйте файл: C:\Python27\Lib\site-packages\rarfile.py вот так: UNRAR_TOOL = r"c:\python27\unrar.exe" Мне помогло. - person E235; 04.04.2017
comment
Нет, ему нужен unrar.exe, которого нет в Linux. - person Maksym Ganenko; 08.05.2020
comment
@MaksymGanenko: В Linux требуется исполняемый файл unrar, который можно установить с помощью диспетчера пакетов. В Debian/Ubuntu это sudo apt install unrar - person MestreLion; 07.08.2020
comment
для перечисления имен членов архива не требуется unrar, однако для извлечения и обновления требуется. Вы также можете иметь программу с открытым исходным кодом unar вместо unrar в качестве резервной копии. - person giuliano-oliveira; 26.10.2020
comment
Для Windows это сработало идеально для меня, но другие пакеты, представленные в другом ответе, не сработали. - person Maryam Bahrami; 28.04.2021

После некоторого глубокого погружения вот мои выводы:

  • RAR не является свободным открытым форматом и принадлежит RARLabs. Вы должны сначала установить их DLL или exe для работы с RAR. Некоторые программы, такие как 7zip, могут уже включать это в себя.
  • patool — это приложение, предоставляющее единую командную строку в качестве оболочки для других внешних приложений сжатия. Изначально он может работать только с TAR, ZIP, BZIP2 и GZIP без внешней поддержки.
  • pyunpack — это библиотека Python, которая изначально может работать только с zip, но предоставляет интерфейс для patool.

Имея это в виду, мне помогли следующие вещи:

  • Убедитесь, что 7zip установлен
  • pip install patool pyunpack

Затем, чтобы использовать его,

import pyunpack

pyunpack.Archive(archive_file).extractall(extract_dir)
person Shital Shah    schedule 27.06.2020

person Roman Pekar    schedule 12.07.2013
comment
нужно ли устанавливать unrar.exe? - person Basj; 31.01.2014
comment
Да, согласно документам, он должен найти unrar.exe. - person DirkR; 18.07.2014
comment
относительно rarfile.readthedocs.org/en/latest/api.html вам нужно указать точный путь для распаковки в скрипте: - rarfile.UNRAR_TOOL = rc:\python27\unrar.exe - person sohom; 10.12.2015
comment
unrar.exe, серьезно? - person Maksym Ganenko; 08.05.2020