zipfile模块
Posted dxnui119
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zipfile模块相关的知识,希望对你有一定的参考价值。
在python中操作zip文件, 基本上都是使用zipfile模块,他可以创建、解压文件,获取zip文件的元数据信息。
我们想要操作一个zip文件,第一步就是初始化ZipFile实例。
1、打开test.zip文件。
import zipfile filename = zipfile.ZipFile(‘test.zip‘)
2、解压文件
目前我们只是传入一个参数地址,实例化了一个对象,想要解压文件还要是要到extractall方法,
三个参数,path是解压的路径(默认为解压文件所在路径),members是需要解压出来的文件(默认为全部文件),pwd是密码。
filename.extractall(pwd=password.encode(‘ascii‘)) 或filename.extractall(pwd=str.encode(password))
因为在python3中pwd需要的是byte,所以需要自行解码
3、查看压缩文件中的文件列表
假设密码是xyz filename = zipfile.ZipFile(‘G:/python/code/test.zip‘,‘r‘) filename.extractall(pwd=str.encode(‘xyz‘)) print(filename.namelist()) [‘test‘]
4、例子:通过密码字典文件破解压缩文件
import zipfile #定义使用密码打开文件的函数 def setpass(filename,password): try: filename.extractall(pwd=str.encode(password)) return password #如果密码正确,则返回密码 except Exception as e: pass #定义暴力破解函数 def read_zipfile(): filename = zipfile.ZipFile(‘G:/python/code/test.zip‘,‘r‘) #用zipfile函数的ZipFile类定义压缩文件 file_pass = ‘G:/python/code/字典-3‘ #定义字典文件 with open(file_pass,encoding=‘utf-8‘) as file: #打开字典文件,这里经测试encoding=‘utf-8‘可以不写 for i in file.readlines(): #读取字典文件中的每一行 gess=setpass(filename,i.strip(‘ ‘)) #调用setpass函数,并传入文件名和密码2个参数,这里注意字典文件中每一行包括1个换行符,所以要去掉,strip(‘/n‘)可以删除i两端的换行符 if gess: print(filename.namelist()) print(‘密码是:‘+i) exit(0) #如果密码正确则退出程序,或者写成break也可以 else: print(‘正在尝试:‘+i) if __name__==‘__main__‘: read_zipfile()
以上是关于zipfile模块的主要内容,如果未能解决你的问题,请参考以下文章
python zipfile模块和optparse模块暴力破解zip文件