本文摘自php中文网,作者爱喝马黛茶的安东尼,侵删。
应对多种压缩包格式的python库:patool。如果平时只用基本的解压、打包等操作,也不想详细了解各种压缩格式对应的python库,patool应该是个不错的选择。相关推荐:《python视频》
patool库支持的格式包括:
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 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
但是,patool的正常运行依赖于其他解压软件,例如,我平时用patool来解压文件时它主要调用了我电脑的7z、Rtools两个程序,如果电脑上没有能够处理相应压缩文件的软件,则会报错:
1 |
|
另外,patool无法处理具有密码保护的压缩文件。
与patool类似的库还有pyunpack、easy-extract:pyunpack库依赖zipfile和patool,支持两库所支持的所有压缩格式,需提前安装;easy-extract库依赖解压软件unrar、7z、par2,需提前安装,同样支持多种解压格式。
常见压缩格式的处理
如果电脑上并未安装相应的压缩软件,只想使用python进行压缩解压操作,可以使用其他的下面来具体介绍几种常见的
zip格式
可以处理zip格式的python库包括python标准库zipfile,以及第三方库python-archive等,下面主要介绍一下zipfile库的基本使用方法:
首先创建ZipFile对象:
1 2 3 4 |
|
解压缩文件包,解压函数共有两个:extract()、extractall(),前者可解压单个文件,默认解压至当前目录,后者可批量解压多个文件,默认解压所有文件。extract()、extractall()均有参数pwd,可处理具有密码的压缩包。
1 2 3 |
|
制作压缩文件:zipfile共有四种压缩文件的方法分别为:zipfile.ZIP_STORED(默认)、zipfile.ZIP_DEFLATED、zipfile.ZIP_BZIP2、zipfile.ZIP_LZMA
1 2 3 4 5 6 |
|
压缩整个文件夹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
rar格式
rar格式没有对应的python标准库,需依赖第三方库rarfile、python-unrar、pyUnRAR2等,上述库的共同点在于依赖RARLAB的UnRAR library的支持,下面主要介绍一下rarfile库:
安装及其配置
安装命令:
1 |
|
但配置颇费了些时间。首先要下载安装UnRAR。因为我的电脑操作系统是Windows,所以去RARLAB官网下载UnRarDLL即可,安装至默认路径C:\Program Files (x86)\UnrarDLL。
然后是添加环境变量,先是将C:\Program Files (x86)\UnrarDLL\x64(我的系统是64位)添加至系统变量中的Path变量(计算机右键>属性>高级系统设置>高级 >环境变量),但重启PyCharm后仍然报错:
1 |
|
然后尝试在系统变量中新建变量,变量名输入?UNRAR_LIB_PATH,变量值为?C:\Program Files (x86)\UnrarDLL\x64\UnRAR64.dll(32位系统下的变量值为C:\Program Files (x86)\UnrarDLL\UnRAR.dll)。重启PyCharm,问题解决。
基本使用方法
rarfile库的使用方法与zipfile十分类似,同样包含extract(), extractall(), namelist(), infolist(), getinfo(), open(), read(), printdir()等函数,最主要的区别在于,RarFile对象只支持读取模式,无法写入文件。
1 2 |
|
利用rarfile库去解压rar压缩包,与利用zipfile库解压zip格式压缩包的方法相同,可参考zipfile库的使用方法。
另外,python-unrar库的安装、设置和使用方法与rarfile库十分类似,但python-unrar库不支持with语句,如果想使用with语句,可在python-unrar库安装目录下的rarfile.py文件中添加如下语句:
1 2 3 4 5 6 7 8 9 |
|
tar格式
tar格式是Unix系统下常见的打包文件的格式,搭配不同的压缩方法可形成不同的压缩文件格式,如:.tar.gz(.tgz)、.tar.bz2(.tbztb2)、.tar.Z(.taz)、.tar.lzma(.tlz)、.tar.xz(.txz)等。tar格式对应的有python标准库tarfile,支持的格式包括:tar, tar.gz, tar.bz2, tar.xz, .tar.lzma等。
tarfile库的基本使用方法:
创建tarfile对象
tarfile库创建对象使用tarfile.open(),而不是使用tarfile.TarFile()。
1 |
|
其中,mode可取的值比较多,主要包括'r', 'w', 'a', 'x'四种模式(在zipfile库的使用中简单介绍过),以及这四种模式与'gz', 'bz2', 'xz'三种压缩方法的组合模式,具体取值如下表所示:
模式 含义
'r'or'r:*' 自动解压并打开文件(推荐模式)
'r:' 只打开文件不解压
'r:gz' 采用gzip格式解压并打开文件
'r:bz2' 采用bz2格式解压并打开文件
'r:xz' 采用lzma格式解压并打开文件
'x'or'x:' 仅创建打包文件,不压缩
'x:gz' 采用gzip方式压缩并打包文件
'x:bz2' 采用bzip2方式压缩并打包文件
'x:xz' 采用lzma方式压缩并打包文件
'a'or'a:' 打开文件,并以不压缩的方式追加内容。如果文件不存在,则新建
'w'or'w:' 以不压缩的方式写入
'w:gz' 以gzip的方式压缩并写入
'w:bz2' 以bzip2的方式压缩并写入
'w:xz' 以lzma的方式压缩并写入
但是,不支持'a'与三种压缩方法的组合模式('a:gz', 'a:bz2'、'a:xz')
基本使用方法
解压缩至指定的目录
1 2 |
|
解压符合某些条件的文件
1 2 3 4 5 6 7 |
|
创建不压缩的打包文件
1 2 3 |
|
创建压缩的打包文件
1 2 3 |
|
压缩并打包整个文件夹,较之zipfile库简单得多,可使用add()函数进行添加
1 2 3 4 5 |
|
其他压缩格式
Python原生的数据压缩打包的标准库还包括:bz2、gzip、zlib、lzma以及建立在zipfile和tarfile库基础上的shutil库,以后有机会再详细介绍。
以上就是python解压文件格式的基本方法的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
更多相关阅读请进入《Python》频道 >>

Python编程 从入门到实践 第2版
python入门书籍,非常畅销,超高好评,python官方公认好书。