一、学习目标:
批量解压一个目录下的所有rar和zip的压缩包。
之前只是解压zip,今天想解压的里面也有rar,奈何之前脚本跑不了,然后就优化了下。
我之前的俩篇博客:
python 解压zip压缩文件,并且还原中文文件名乱码问题
1、安装模块:
pip install rarfile
2、rarfile.RarCannotExec: Cannot find working tool问题:
解压rar会报错:
这个我在本机电脑找到了,放到了蓝奏云上面。需要的下载即可。
下载文件:https://wwa.lanzous.com/ikZcNkw4kkb
然后把文件放到项目的Scripts
目录下面。
参考文章:
https://blog.csdn.net/weixin_30389003/article/details/99440841
3、批量解压代码:
import zipfile
import os
from pathlib import Path
import rarfile
import os
def unzip_file(file_zip_path):
new_zip_dir = file_zip_path.rsplit('\\',1)[0] + '/data'
if not os.path.isdir(new_zip_dir):
os.makedirs(new_zip_dir)
zFile = zipfile.ZipFile(file_zip_path, "r")
# ZipFile.namelist(): 获取ZIP文档内所有文件的名称列表
for fileM in zFile.namelist():
# zFile.extract(fileM, new_zip_dir)
# 解压出来单个文件
extracted_path = Path(zFile.extract(fileM,new_zip_dir))
# print("fileM.encode('cp437').decode('gbk')",fileM.encode('cp437').decode('gbk'))
# print("extracted_path",extracted_path)
# 文件重命名,将中文的文件名还原
extracted_path.rename(new_zip_dir+'//'+fileM.encode('cp437').decode('gbk'))
zFile.close()
return new_zip_dir
def unrar_file(filename):
new_zip_dir = filename.rsplit('\\', 1)[0] + '/data'
if not os.path.isdir(new_zip_dir):
os.makedirs(new_zip_dir)
rar = rarfile.RarFile(filename, mode='r') # mode的值只能为'r'
rar.extractall(new_zip_dir) # 解压文件
rar.close() # 关闭文件,必须有,释放内存
if __name__ == '__main__':
dir_path = r"压缩包的目录"
file_name_list = os.listdir(dir_path)
for file_name in file_name_list:
file_name_path = os.path.join(dir_path,file_name)
if os.path.isfile(file_name_path):
print("准备解压",file_name_path)
if file_name.endswith('.zip'):
unzip_file(file_name_path)
elif file_name.endswith('.rar'):
unrar_file(file_name_path)
else:
print("不是压缩文件",file_name_path)
else:
print("不是文件",file_name_path)