python压缩解压缩_python压缩/解压缩

在知乎有人私信问,用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的方法..看下面你就懂了:

27c68168f153

rarfile FAQ

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值