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文件

Python的zipfile模块无法更新条目[重复]

为啥 Python zipfile 模块在 zip 文件中创建完整路径

Python zipfile 模块不压缩文件

python模块之ZipFile

python模块 zipfile