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)、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归档)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)、
在标准库中,您已经有了模块
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
不存在,其他将是粗略的。