900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python批量解压文件_Python 批量解压ZIP和RAR压缩文件(循环验证密码)

python批量解压文件_Python 批量解压ZIP和RAR压缩文件(循环验证密码)

时间:2024-01-30 14:53:43

相关推荐

python批量解压文件_Python 批量解压ZIP和RAR压缩文件(循环验证密码)

# 介绍:复制全文,修改路径和密码,实现批量解压zip或rar压缩包,按给定的多个密码进行验证,并对解压后文件按顺序重命名

import os

import re

import zipfile

import rarfile

# 设定参数

path_in='C:\\your_path_1\\...' # 要解压的压缩包所在路径

path_out='C:\\your_path_2\\...' # 解压后文件存放的路径

pwd_list=['pwd1','pwd2','pwd3','pwd4'] # 如有多个密码,按数组方式填入

# 解压rar文件

def un_rar_file(file_name,path_out,pwd,i):

rar_file = rarfile.RarFile(file_name)

for names in rar_file.namelist(): # 遍历压缩包内文件名称

rar_file.extract(names,path_out,pwd) # 解压文件名、解压后路径、密码

os.rename(path_out+names,path_out+str(i)+'、'+names,) #重命名解压后文件,文件名开头加上数字序号

rar_file.close()

# 解压zip文件

def un_zip_file(file_name,path_out,pwd,i):

zip_file = zipfile.ZipFile(file_name)

for names in zip_file.namelist():

# zip解压库的密码需要转码为gbk

zip_file.extract(names,path_out,(pwd).encode('gbk'))

os.rename(path_out+names,path_out+str(i)+'、'+names,)

zip_file.close()

# 主函数入口

if __name__ == "__main__":

dire=os.walk(path_in) # 对象:该路径下所有文件和子文件夹文件

# file_name_list = os.listdir(path) # 另一种方式:扫描目标路径的文件,将文件名存入列表

for items in dire: # 遍历该文件夹

file_name_list=items[-1] # [-1]为文件名list,[0]路径,[1]文件夹,[2]也是[-1]是文件名

i=0

for file_name in file_name_list: # 遍历文件名,文件顺序i。

i=i+1

for pwd in pwd_list: # 遍历密码

try:

if file_name.split('.')[-1]=='rar': # 如果压缩文件是rar类型

un_rar_file(path_in+file_name,path_out,pwd,i) # 调用解压函数

elif file_name.split('.')[-1]=='zip':

un_zip_file(path_in+file_name,path_out,pwd,i)

else:

print(str(i)+'、*** '+file_name + ' is not a zip or rar file !')

break # 如果不是压缩文件,直接跳出该循环

# 如果解压出错(假定是密码错误)

except Exception as e:

# print(e)

print(str(i)+'、*** passwd:"'+pwd+' is error for file:'+file_name+',try another passwd !')

else:

print(str(i)+'、passwd:"'+pwd+'" is correct for file:'+file_name)

break # 如果正常解压,直接跳出该循环,不再尝试其他密码

# 备注:

# 1、解决rar找不到Unrar组件报错的问题

'''

# 下载UnRAR.exe放在主程序同级目录即可,下载地址:/rar/UnRARDLL.exe

'''

# 2、解决输出文件名中文乱码问题,修改组件 zipfile 的源码如下:

'''

if flags & 0x800:

# UTF-8 file names extension

filename = filename.decode('utf-8')

else:

# Historical ZIP filename encoding

filename = filename.decode('cp437')

# 增加如下一行

filename = filename.encode("cp437").decode('gbk')

if zinfo.flag_bits & 0x800:

# UTF-8 filename

fname_str = fname.decode("utf-8")

else:

fname_str = fname.decode("cp437")

# 增加如下又一行

fname_str = fname_str.encode("cp437").decode('gbk')

'''

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。