如何使用Python解压缩文件

44

如何使用Python解压缩.zip.rar文件?

6个回答

46

晚了,但我对任何一个答案都不满意。

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

可在 Windows 和 Linux 上运行,无需其他库。


好的库,但灵活性很少。例如,它不能覆盖GZ文件。有关更多详细信息,请参见此问题:https://dev59.com/oV0b5IYBdhLWcg3wEdsx - multigoodverse
61
我尝试了以上方法,但出现了patoolib.util.PatoolError: could not find an executable program to extract format rar; candidates are (rar,unrar,7z)的错误。如果我的理解是正确的,我需要其中一个实用工具,这和最初的目的相悖。 - some user

22

尝试使用pyunpack包:

from pyunpack import Archive
Archive('a.zip').extractall('/path/to')

2
需要使用 patool 或其他工具吗? - Basj
1
是的,只有zip文件可以被解压缩。请查看我提供的链接中的pyunpack文档,那里有所有的内容。 - Irakli Darbuashvili

13

经过深入研究,这是我的发现:

  • 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)

12

1
如果您决定使用rarfile,在尝试提取文件时可能会遇到问题。这是因为提取使用的是来自winrar网站(http://www.rarlab.com/rar_add.htm)的UnRaR.exe工具。 Windows的直接链接:http://www.rarlab.com/rar/unrarw32.exe。 请确保拥有此文件。 我将其放在C:\Python27\UnRar.exe中。 像这样编辑文件:C:\Python27\Lib\site-packages\rarfile.pyUNRAR_TOOL = r"c:\python27\unrar.exe" 这对我很有帮助。 - E235
不行,它需要unrar.exe,这在Linux上是不可用的。 - Maksym Ganenko
@MaksymGanenko:在Linux上,需要使用“unrar”可执行文件,可以通过软件包管理器进行安装。在Debian/Ubuntu上,可以使用“sudo apt install unrar”命令进行安装。 - MestreLion
列出存档成员名称不需要 unrar,但提取和更新需要。您也可以使用开源程序 unar 作为后端代替 unrar - giuliano-oliveira
对于 Windows,它对我来说完美运行,但其他答案中介绍的其他软件包则不行。 - Maryam Bahrami

5

需要安装 unrar.exe 吗? - Basj
是的,根据文档,它需要能够找到unrar.exe。 - DirkR
1
关于 https://rarfile.readthedocs.org/en/latest/api.html,您需要在脚本中指定unrar的确切路径:- rarfile.UNRAR_TOOL = r"c:\python27\unrar.exe"。 - sohom
2
解压缩软件是unrar.exe?真的吗? - Maksym Ganenko
仅维护和可用 - oeter

4

这种方法仅需要安装7zip。
在每个支持7zip的系统上都能无缝运行。
完全不需要使用Python包。

import subprocess
subprocess.run('7z x -oOutdir archive.rar')

subprocess模块是Python自带的。


1
谢谢您先生。方法简洁明了。 - Guimoute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接