美文网首页
python压缩/解压缩

python压缩/解压缩

作者: destino74 | 来源:发表于2015-05-11 20:06 被阅读4382次

    在知乎有人私信问,用python对zip/rar文件进行解压缩,把得到的文件进行一定的内容替换再压缩成zip/rar是否可行。
    我记得python有个zipfile模块可以做这个事,不过说实话还没试过,所以来写个例子记录下。
    例子很简单,不写多的说明了,直接贴代码看注释吧。

    # coding=utf-8
    import os
    import os.path
    import zipfile
    import sys
    reload(sys)
    sys.setdefaultencoding('gbk')   # windows下编码问题
    
    
    def gzip(zip_name, file_dir):
        zip_name = zip_name.decode('utf-8')
        file_dir = file_dir.decode('utf-8')
        filelist = []
        if os.path.isfile(file_dir):
            filelist.append(file_dir)
        else:
            for root, dirs, files in os.walk(file_dir):
                for file in files:
                    filelist.append(os.path.join(root, file))
    
            zf = zipfile.ZipFile(zip_name, 'w', zipfile.zlib.DEFLATED)
            for tar in filelist:
                arcname = tar[len(file_dir):]
                zf.write(tar, arcname)
            zf.close()
    
    
    def unzip(zip_name, unzip_dir):
        unzip_dir = unzip_dir.decode('utf-8')   # 不转码会乱码
        zip_name = zip_name.decode('utf-8') # 不转码zipfile报错
        if not os.path.exists(unzip_dir):
            os.mkdir(unzip_dir)
        zfobj = zipfile.ZipFile(zip_name)
        for file_name in zfobj.namelist():
            file_name = file_name.replace('\\', '/')
            if file_name.endswith('/'):
                # try:
                #     file_name = file_name.decode('utf-8')
                # except UnicodeDecodeError:
                #     file_name = file_name.decode('gbk')
                os.mkdir(os.path.join(unzip_dir, file_name))
            else:
                # try:
                ext_filename = os.path.join(unzip_dir, file_name)
                # except UnicodeDecodeError:
                #     ext_filename = os.path.join(unzip_dir, file_name.decode('gbk'))
                ext_filedir = os.path.dirname(ext_filename)
                if not os.path.exists(ext_filedir):
                    os.mkdir(ext_filedir)
                data = zfobj.read(file_name)
                with open(ext_filename, 'w') as f:
                    f.write(data)
        zfobj.close()
    
    
    import rarfile
    def unrar(rar_file, dir_name):      # rarfile需要unrar支持, linux下pip install unrar, windows下在winrar文件夹找到unrar,加到path里
        rarobj = rarfile.RarFile(rar_file.decode('utf-8'))
        rarobj.extractall(dir_name.decode('utf-8'))
    
    if __name__ == '__main__':
        gzip(r'E:\Project\zip_adv\zip文件.zip', r'E:\Project\zip_adv\压缩文件')
        unzip(r'E:\Project\zip_adv\zip文件.zip', r'E:\Project\zip_adv\解压缩zip')
        unrar(r'E:\Project\zip_adv\rar文件.rar', r'E:\Project\zip_adv\解压缩rar')
    

    也许你会很奇怪为什么没有压缩rar的方法..看下面你就懂了:

    rarfile FAQ

    rarfile FAQ里明确写了不支持创建rar压缩卷,让你用zip/7z.

    相关文章

      网友评论

          本文标题:python压缩/解压缩

          本文链接:https://www.haomeiwen.com/subject/mslfqttx.html