原创

解压无限级子目录中的ZIP和RAR文件:Python脚本与7-Zip的自动化解决方案

前言

在日常工作中,我们经常会遇到需要解压大量压缩文件的情况,尤其是当这些文件被组织在多层次的目录结构中时。手动解压这些文件不仅耗时,而且容易出错。为了解决这一问题,我开发了一个Python脚本,该脚本能够自动遍历指定目录及其所有子目录中的ZIP和RAR文件,并尝试使用预设的密码表中的密码来解压这些文件。本文将详细介绍这个脚本的工作原理、使用方法以及如何生成详细的解压报告。

脚本功能

这个Python脚本提供了以下功能:

  1. 递归遍历​:自动遍历指定根目录及其所有子目录中的ZIP和RAR文件。
  2. 密码尝试​:使用预设的密码表中的密码尝试解压每个压缩文件。
  3. 解压报告​:生成一个报告文件,记录每个文件的解压结果,包括成功解压的文件数量和使用的密码字典数量。
  4. 数据完整性​:(可选)通过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()

报告生成

脚本在处理结束后会在指定的报告文件中总结探测到的文件总数、成功解压的文件数量和使用的密码字典数量。这有助于用户快速了解解压过程的成果。

使用方法

  1. 设置路径​:将脚本中的ZIP_DIRPASSWORD_FILEREPORT_FILE变量的值替换为你的压缩文件目录、密码表文件和报告文件的实际路径。
  2. 保存脚本​:将上述代码保存为一个.py文件,例如unzip_unrar_all.py
  3. 运行脚本​:在命令行中运行这个Python脚本,确保你的系统上已经安装了Python。

执行情况

图片.png

结论

这个Python脚本提供了一个自动化的解决方案,用于处理大量压缩文件的解压工作,特别是当这些文件分布在多层次的目录结构中时。通过自动化这个过程,我们可以节省时间,减少人为错误,并确保数据的完整性。希望这个脚本能够帮助你有效地管理你的压缩文件。

本文来自:解压无限级子目录中的ZIP和RAR文件:Python脚本与7-Zip的自动化解决方案-小码农,转载请保留本条链接,感谢!

温馨提示:
本文最后更新于 2024年11月14日,已超过 37 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
本文目录