如上篇所说,我要使用Python解压一些文件,一来就不懂,google到zipfile了,然后又google到rarfile了。rarfile是模仿zipfile模块写的,所以接口几乎一样,只有rar和zip的字符差别。但是zip功能是python内置模块,rar不是,不是亲妈生的有些问题,还存在严重的跨平台问题。
(所以此文有点操作系统区别,rarfile需要unrar.exe的支持,我只在win7下测试了)
1.ZipFile
这是个内置模块,所以google一下就找到了。在Python官网有很全的文档,全英文,去年认真学的英文此刻觉得很感动。在写此文时有个意外收获,它提供了zipfile.is_zipfile(filename)接口,不过我上篇的 filetype判断还是有用的,所以不会回头去改实现了。
我需要的功能的全部解压,所以用到了ZipFile.extractall([path[, members[, pwd]]])这个函数。其他函数没时间一个一个试过去,知其意和知其有这个接口就好了,下次用到再测试,免得把问题复杂化。
2.RarFile
安装一般都是 (这里有python第三方安装方法的大全)
pip install rarfile
或
easy_install http://prdownload.berlios.de/rarfile/rarfile-2.4.tar.gz
前提是你安装了pip或easy_install,如果都没装那就只能手动安装了,方法是下载解压,然后找到setup.py
python setup.py install
还不行,你安装python了么,或者把python路径设为环境变量了么?
用法跟zip一样,文档 不一一解说了。测试时产生了如下错误
rarfile.RarExecError: Unrar not installed? (rarfile.UNRAR_TOOL='unrar')
everything 了一下unrar,在winrar的目录中找到unrar.exe,把着侥幸的心理把他拷贝到我的python脚本目录下,再执行就ok了。看来使用rarfile需要系统安装unrar并环境变量path中(命令行可以直接访问到)
3.中文问题
Python里的中文一直是我头大的问题,不过久而久知也大概知道怎么解决,但今天出现的问题又让我头大了。然后,坚持不懈的我还是把他解决了。传说这个问题也在windows系统中常见,大牛不在windows世界中混,或者大牛不在windows的中文系统中混。苦逼了我们这些被迫用windows的程序员(其实我也喜欢在MacOS和Ubuntu下折腾,但是公司的事无解了)。屁话少说,直接上问题和解决方法
UnicodeEncodeError: 'ascii' codec can't encode characters in position 44-48: ordinal not in range(128)
在程序开头加上以下代码
import sys
reload(sys)
sys.setdefaultencoding('gbk')
如果你在windows的中文系统中遇到中文会遇到莫名其妙的问题,就加上这些代码。