python+patool处理不同类型的压缩包
使用python处理压缩包,需要根据压缩的类型来选择不同的库处理,例如:rarfile、zipfile、tarfile等,而patool可以应对多种压缩包格式。
patool
patool 是一个压缩和解压缩工具,可对压缩包进行创建、解压、提取、测试、列表、搜索、比较和重新打包
patool库支持的格式包括:
1 | 7z (.7z, .cb7), ACE (.ace, .cba), 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), ISO (.iso), LRZIP (.lrz), LZH (.lha, .lzh), LZIP (.lz), LZMA (.lzma), LZOP (.lzo), RPM (.rpm), RAR (.rar, .cbr), RZIP (.rz), SHN (.shn), TAR (.tar, .cbt), XZ (.xz), ZIP (.zip, .jar, .cbz) and ZOO (.zoo) |
patool安装
1 | pip install patool |
注:其本质是依赖电脑上的其他解压程序,例如安装了7z。在处理压缩文件时候,就会调用7z去处理。
如果电脑上没有能够处理相应压缩文件的软件,则会报错:
1
patoolib.util.PatoolError: could not find an executable program to extract format rar; candidates are (rar,unrar,7z)
patool的基本使用方法:
1 | import patoolib |
patch
如果压缩文件有问题或者是有密码,会导致解压失败,然后程序就一直等待中不退出。patool官方已经好久没维护了,因此需要自己打个patch.
详见:https://gitea.kiki.kim/ha/patool/commit/aa7776875bf9c24849c7d3f516b72e3d335ada67
包含patch的安装包:https://gitea.kiki.kim/ha/patool/releases
patool\patoolib\programs\p7rzip.py
1 |
|
patool\patoolib\programs\p7zip.py
1 | 将所有的 都改成 ['-p-', '-y'] |