Python中的Zip模块

Python中的Zip模块

在之前的项目中,遇到了一种业务场景,对于分包处理的smali文件,通过Apktool 1.5版进行打包,只会识别smali文件下的smali文件,而从Dex并没有导入到最终的apk包中,需要写一个脚本重新将其余的smali文件打包成从Dex文件,然后写入到apk中,这里我使用了python中的zip模块来处理。

zipfile模块下的ZipFile类

我们可以看一下该类中的注释:

Class with methods to open, read, write, close, list zip files.

z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=True)

file: Either the path to the file, or a file-like object.
      If it is a path, the file will be opened and closed by ZipFile.
mode: The mode can be either read 'r', write 'w', exclusive create 'x',
      or append 'a'.
compression: ZIP_STORED (no compression), ZIP_DEFLATED (requires zlib),
             ZIP_BZIP2 (requires bz2) or ZIP_LZMA (requires lzma).
allowZip64: if True ZipFile will create files with ZIP64 extensions when
            needed, otherwise it will raise an exception when this would
            be necessary.
参数意义
filezip压缩文件路径
mode打开模式,其中r是读取已存在的zip文件,w表示新建一个zip或者覆盖原有zip文件,a表示将内容添加到现有的zip中
compressionzip文档使用的压缩方法,zipfile. ZIP_STORED、ZIP_DEFLATED、ZIP_BZIP2、ZIP_LZMA
allowZip64需要创建大的zip文件的时候最好设置成True

获取zip文件中的信息

import zipfile
import os
# -*- coding: utf-8 -*-

# 打开压缩文件
zipFile = r'E:\Android\Android.zip'
zipTask1 = zipfile.ZipFile(zipFile,'r')
# 遍历zip压缩文件中的文件名称
for name in zipTask1.namelist():
    print(name)
# 遍历zip压缩文件中的文件信息
for info in zipTask1.infolist():
    print(info)
zipTask1.close()

运行结果:

创建zip文件以及添加文件

# 将一个文件写入到zip包中
zipTask2 = zipfile.ZipFile(zipFile,'a',zipfile.ZIP_DEFLATED)
fileTxt = os.path.join(r'E:\Android',r'readme.txt')
zipTask2.write(fileTxt,r'readme2.txt')
zipTask2.close()

运行结果:
我们可以到成功的将这个文件写到了该zip文件中。

解压zip文件

# 解压文件:
targetDir = r'E:\MyBlog\Python_zip'
zipTask3 = zipfile.ZipFile(zipFile,'r',zipfile.ZIP_DEFLATED)
zipTask3.extractall(targetDir)
zipTask3.close()

设置解压密码

# 设置压缩文件密码
pwd = 'ilovepython'
zipFile = r'E:\Android\Android.zip'
zipTask4 = zipfile.ZipFile(zipFile,'r',zipfile.ZIP_DEFLATED)
zipTask4.setpassword(pwd)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值