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()
原文地址:https://www.cnblogs.com/dxnui119/p/10082217.html