Python 提取多种类型的档案

Python 提取多种类型的档案,python,Python,Python中是否有任何模块可以让我提取各种存档?我需要提取zip,tar.bz2,tar.z,rar和其他。 现在看来,我必须手动执行归档类型检测,还要为每个归档类型编写提取 最好使用纯Python。请查看。我不能证明它工作得有多好,但是有一些其他模块是基于它的,尽管它确实依赖于外部应用程序的一些格式 patool支持7z(.7z)、ACE(.ACE)、ADF(.ADF)、ALZIP(.alz)、APE(.APE)、AR(.a)、ARC(.ARJ)、BZIP2(.bz2)、CAB(.CAB)、

Python中是否有任何模块可以让我提取各种存档?我需要提取zip,tar.bz2,tar.z,rar和其他。 现在看来,我必须手动执行归档类型检测,还要为每个归档类型编写提取

最好使用纯Python。

请查看。我不能证明它工作得有多好,但是有一些其他模块是基于它的,尽管它确实依赖于外部应用程序的一些格式

patool支持7z(.7z)、ACE(.ACE)、ADF(.ADF)、ALZIP(.alz)、APE(.APE)、AR(.a)、ARC(.ARJ)、BZIP2(.bz2)、CAB(.CAB)、COMPRESS(.Z)、CPIO(.CPIO)、DEB(.DEB)、DMS(.DMS)、FLAC(.FLAC)、GZIP(.GZIP)、LZIP(.lz)、LZH(.LZH(.LZH、.LZH)、LZIP(.lz)、LZMA(.LZMA)、LZOP(.lzo)、RPM)、RAR(.DEB)、rz)、SHN(.SHN)、TAR),XZ(.XZ)、ZIP(.ZIP、.jar)和ZOO(.ZOO)格式。它依赖于助手应用程序来处理这些归档格式(例如,bzip2用于bzip2归档)


在标准库中,您已经有了模块
zlib
gzip
bz2
zipfile
tarfile
,用于处理压缩档案


对于rar归档,有一个类似于zipfile的接口,可以与python 2和3一起使用

从3.2开始,它看起来像是
shutil
是,但到目前为止,只支持gziptar、bztar、tar和zip


您可以使用shutil.register\u archive\u format()添加自己的处理程序-这样您就不必手动检测扩展…但您仍然需要自己定义提取。

此线程很旧,但我再次遇到此问题。 我曾经尝试过Patool选项或pyunpack(依赖于Patool),但强烈建议不要使用基于Patool的选项,而是像Patool一样使用内置的shutil库。因为库名的改变,我改变了自己

如前所述,我选择了高级内置的shutil库,下面是我向shutil功能添加7z和rar格式的代码,这是完整的初始问题。 请注意,这需要
p7zip full
p7zip rar
,可以通过
pip安装轻松设置:

def extractfiles(zipname, output_dir):
    """Extract files with 7z utils.

    -aoa switch asks for automatic overwrite without prompting user.
    """
    logging.info(f"Extracting {zipname} to {output_dir}")
    pipe = Popen(["7z", "x", "-aoa", "-bd", zipname, f"-o{output_dir}"], stderr=STDOUT, stdout=PIPE)
    return(pipe.communicate())


def register_extensions():
    """Register additionnal archive formats supported by 7zip in shutil."""
    shutil.register_unpack_format('rar', ['.rar', '.RAR'], extractfiles)
    shutil.register_unpack_format('7z', ['.7z', '.7Z'], extractfiles)

我知道rar、zip和tar都有类似于
tarfile
模块的Python接口。其他的,我不确定。不,没有。您可以使用
import-zipfile
进行压缩,使用
import-tarfile
进行tar,但是
rar
不存在,其他将是粗略的。