4

Python中是否有任何模块可以让我提取各种档案?我需要解压ziptar.bz2tar.zrar等。现在看起来我必须手动进行存档类型检测,并且还要为每个单独的文件编写一个提取。

更喜欢纯Python

4

4 回答 4

2

查看帕图尔。我无法证明它的工作情况如何,但还有一些基于它的其他模块,尽管它确实依赖于某些格式的外部应用程序。

patool 支持 7z (.7z), ACE (.ace), ADF (.adf), ALZIP (.alz), APE (.ape), AR (.a), ARC (.arc), ARJ (.arj), BZIP2 (.bz2)、CAB (.cab)、COMPRESS (.Z)、CPIO (.cpio)、DEB (.deb)、DMS (.dms)、FLAC (.flac)、GZIP (.gz)、LRZIP ( .lrz), LZH (.lha, .lzh), LZIP (.lz), LZMA (.lzma), LZOP (.lzo), RPM (.rpm), RAR (.rar), RZIP (.rz), SHN (.shn)、TAR (.tar)、XZ (.xz)、ZIP (.zip、.jar) 和 ZOO (.zoo) 格式。它依赖于帮助应用程序来处理这些存档格式(例如 bzip2 用于 BZIP2 存档)。

于 2013-04-16T05:31:57.620 回答
1

在标准库中,您已经有了模块zlibgzipbz2zipfiletarfile处理压缩档案。

对于 rar 档案,pypi 上有一个 rarfile 模块,它具有与 zipfile 类似的接口,并适用于 python 2 和 3。

于 2013-04-16T05:32:32.330 回答
1

shutil从 3.2 开始,它似乎添加了更多的归档功能,但目前只支持 gziptar、bztar、tar 和 zip。

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

于 2013-10-28T16:54:55.067 回答
0

这个线程很旧,但我又遇到了这个问题。我已经尝试过 Patool 选项或 pyunpack(依赖于 Patool),但强烈建议不要使用基于 Patool 的选项并使用内置的 shutil 库,因为 Patool 似乎有一段时间不支持了。由于更改了库名称,我自己遇到了一个错误。

正如crennie回答的那样,我选择了高级内置 shutil 库,下面是我将 7z 和 rar 格式添加到 shutil 功能的代码,这是完整的初始问题。请注意,这需要p7zip-full并且p7zip-rar可以使用以下命令轻松设置pip install

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)
于 2020-09-16T07:30:11.803 回答