压缩zipfile与解压缩tarfile模块

压缩zipfile与解压缩tarfile模块

引入

  • shutil 对压缩包的处理实际上是调用了 ZipFileTarFile 这两个模块

一、zipfile 模块

1.什么是 zipfile 模块

  • zipfile 模块是 Python里用来做 zip格式编码压缩和解压缩的工具, 所以这个模块也是比较常用的。

  • Windows 中常见的就是 zip 格式的压缩包

2.zipfile.ZipFile类的使用

  • 形参 mode 应当为 'r' 来读取一个存在的文件,'w' 来截断并写入新的文件, 'a' 来添加到一个存在的文件。ZipFile 也是一个上下文管理器,也支持with语句。

  • 模块中 ZipFile 类的组要功能是创建和读取 zip 文件

    import zipfile,os
    
    #压缩多个文件
    z=zipfile.ZipFile("txx.zip","w")     # 得到一个对象赋值给z
    z.write("./passdict.txt")            # 将"passdict.txt"这个目录加入压缩包
    z.write("./password.txt")        # 将"password.txt"加入压缩包
    z.close()                   # 关闭文件, 结束时必须要有
    
    
    #解压多个文件
    z = zipfile.ZipFile("txx.zip","r")
    z.extractall(path="./ccc")  # 解压到 "./ccc" 中
    z.close()
    
    print(os.listdir("./ccc"))  # ['passdict.txt', 'password.txt']
    
    

3.解压解码zip文件

  • 目前 zipfile 模块支持 zip 格式加密文件的解密, 但目前无法创建加密文件
  • 并且解密文件目前只支持传统的加密算法: ZipCrypto, 其他不支持:AES-256

252edfa067a65fa0b3acb4dd0265e6b

使用with语句:

with zipfile.ZipFile('2021123.zip', 'w') as f:
    f.write('password.txt')

with zipfile.ZipFile('2021123.zip', 'r') as f:
    f.extractall(path='./test', pwd='123'.encode('utf-8'))

4.字符串(str) 与字节(Bytes) 的转换

👼将字符串转"bytes" (也可以直接在字符串前面写一个小b)
st="123"
b=bytes(st,encoding="utf-8")
print(b,type(b))    #b'123' <class 'bytes'>

🥩将"bytes"转字符串
b = b'123'
str2 = b.decode("utf-8")
print(str2,type(str2))  #123 <class 'str'>

🍬将bytes转成字符串
b = b"123"
str3 = str(b,encoding="utf-8")
print(str3,type(str3))  # 123 <class 'str'>

二、tarfile模块

import tarfile,os

🚗压缩
t=tarfile.open("./low.tar","w")
t.add("./passdict.txt",arcname="passdict.bak")  #将“passdict.txt”这个目录加入压缩包
t.add("./password.txt",arcname="password.bak")  #将"password.txt”加入压缩包
t.close()
print(os.listdir("./")) #['2021123.zip', 'ccc', 'li.py', 'low.tar', 'packge.py', 'passdict.txt', 'password.txt', 'test', 'txx.zip']

🚚解压
t=tarfile.open("./low.tar","r")
t.extractall("./low")  #解压到“./low"中
t.close()
print(os.listdir("./low"))  #['passdict.bak', 'password.bak']

三、zip压缩包密码暴力破解

1.准备一个密码库

🎅pwd.lib文件内容如下:
12345679,1234567890,asdasdasd,abc123456,aa123456,10101010,xiaoxiao,qwe123456,taoxiaoxin,taoxiaoxin123,8848,123,123456,9999,8888

🥽设置OOS.zip文件密码为taoixaoxin123

2、编写循环对比程序

import zipfile
with open("pwd.lib","r") as lib:
    li = lib.read().strip().split(",")
    for pwasswd in li:
        f=zipfile.ZipFile("./OSS.zip","r")
        try:
            f.extractall(".",pwd=bytes(pwasswd,encoding="utf-8"))
            print("解压成功~~")
            f.close()
            break
        except RuntimeError:
            ...
    else:
        print("没有匹配的密码,请重试~")

3.测试

  • 第一次没有在密码库里放“taoxiaoxin123”,所以匹配不成功

    输出内容:没有匹配的密码,请重试~

  • 在密码库里面加入密码“taoxiaoxin123”再来一次

    输出内容:解压成功~~

    🎄说明已经解压成功了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾维斯Echo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值