解压无限级子目录中的ZIP和RAR文件:Python脚本与7-Zip的自动化解决方案
前言
在日常工作中,我们经常会遇到需要解压大量压缩文件的情况,尤其是当这些文件被组织在多层次的目录结构中时。手动解压这些文件不仅耗时,而且容易出错。为了解决这一问题,我开发了一个Python脚本,该脚本能够自动遍历指定目录及其所有子目录中的ZIP和RAR文件,并尝试使用预设的密码表中的密码来解压这些文件。本文将详细介绍这个脚本的工作原理、使用方法以及如何生成详细的解压报告。
脚本功能
这个Python脚本提供了以下功能:
- 递归遍历:自动遍历指定根目录及其所有子目录中的ZIP和RAR文件。
- 密码尝试:使用预设的密码表中的密码尝试解压每个压缩文件。
- 解压报告:生成一个报告文件,记录每个文件的解压结果,包括成功解压的文件数量和使用的密码字典数量。
- 数据完整性:(可选)通过7-Zip的测试命令验证解压后的数据完整性。
准备工作
在运行脚本之前,请确保:
- 你的系统上安装了Python。
- 7-Zip已安装,并且
7z.exe
可以在命令行中直接调用。 - 你有一个包含可能密码的密码表文件。
脚本详解
核心代码
脚本的核心在于使用os.walk()
函数递归遍历目录,以及使用subprocess
模块调用7-Zip命令行工具。
import subprocess
import os
# 设置7z命令的路径和压缩文件目录
SEVENZIP = "7z"
ZIP_DIR = "C:\\path\\to\\your\\zip\\files"
PASSWORD_FILE = "C:\\path\\to\\your\\passwords.txt"
REPORT_FILE = "extraction_report.txt"
# 读取密码表文件并存储密码
def read_passwords(password_file):
with open(password_file, 'r', encoding='utf-8') as file:
passwords = [line.strip() for line in file if line.strip()]
return passwords
# 尝试使用密码解压压缩文件
def try_passwords(archive_file, passwords):
for password in passwords:
command = [SEVENZIP, 'x', '-o' + os.path.dirname(archive_file), archive_file, '-p' + password, '-aoa']
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
if result.returncode == 0:
return True, password
return False, None
# 记录结果到报告文件
def log_result(relative_path, success, password=None):
with open(REPORT_FILE, 'a', encoding='utf-8') as report:
if success:
report.write(f'Successfully extracted: {relative_path} with password: {password}\n')
else:
report.write(f'Failed to extract: {relative_path}\n')
# 主函数
def main():
passwords = read_passwords(PASSWORD_FILE)
open(REPORT_FILE, 'w').close() # 清空报告文件
for root, dirs, files in os.walk(ZIP_DIR):
for file in files:
if file.lower().endswith(('.zip', '.rar')):
archive_file_path = os.path.join(root, file)
relative_path = os.path.relpath(archive_file_path, ZIP_DIR)
print(f'Trying to extract: {relative_path}')
success, password = try_passwords(archive_file_path, passwords)
log_result(relative_path, success, password)
print("Processing complete. Check the report for details.")
if __name__ == "__main__":
main()
报告生成
脚本在处理结束后会在指定的报告文件中总结探测到的文件总数、成功解压的文件数量和使用的密码字典数量。这有助于用户快速了解解压过程的成果。
使用方法
- 设置路径:将脚本中的
ZIP_DIR
、PASSWORD_FILE
和REPORT_FILE
变量的值替换为你的压缩文件目录、密码表文件和报告文件的实际路径。 - 保存脚本:将上述代码保存为一个
.py
文件,例如unzip_unrar_all.py
。 - 运行脚本:在命令行中运行这个Python脚本,确保你的系统上已经安装了Python。
执行情况
结论
这个Python脚本提供了一个自动化的解决方案,用于处理大量压缩文件的解压工作,特别是当这些文件分布在多层次的目录结构中时。通过自动化这个过程,我们可以节省时间,减少人为错误,并确保数据的完整性。希望这个脚本能够帮助你有效地管理你的压缩文件。
本文来自:解压无限级子目录中的ZIP和RAR文件:Python脚本与7-Zip的自动化解决方案-小码农,转载请保留本条链接,感谢!
温馨提示:
本文最后更新于 2024年11月14日,已超过 21 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
正文到此结束
- 本文标签: python rar 脚本
- 本文链接: https://djc8.cn/archives/unzip-zip-and-rar-files-in-unlimited-subdirectories-automated-solution-for-python-scripting-and-7zip.html
- 版权声明: 本文由小码农原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权