You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

撤销zipfile.ZipFile写操作:误执行代码致文件损坏急求恢复方案

紧急求助:误运行错误代码致全磁盘文件损坏,求恢复方案

开发程序时嫌手动打包Zip麻烦,写了一段自动打包的代码,没测试就运行了,结果磁盘里所有文件全损坏了,现在没法开展工作。不管用什么编程语言,只要能解决问题就行。

导致损坏的错误代码

import zipfile
import os
import glob

for file in glob.glob("**/*.*", recursive=True):
        print(file)
        with open(file, 'rb') as f:
            data = f.read()
        with zipfile.ZipFile(file, 'w') as zip_file:
            zip_file.writestr(file, data)

错误原因

这段代码的问题是:遍历到每个文件后,直接以w模式打开该文件作为Zip包写入,把原文件内容打包进这个Zip包,直接覆盖了原文件——说白了,你的所有文件现在其实都是包含原文件内容的Zip压缩包,只是扩展名没改,所以看起来像是损坏了。

恢复方案

1. 批量提取Zip包内的原始文件(最直接有效)

因为每个损坏文件本质是Zip包,里面存着你原来的文件内容,可以用代码批量提取:

import zipfile
import os
import glob

# 先找个测试目录跑一遍,确认可行再全量处理
target_directory = "."  # 替换成你要恢复的目录路径

for file_path in glob.glob(os.path.join(target_directory, "**/*.*"), recursive=True):
    try:
        # 尝试将文件作为Zip包打开
        with zipfile.ZipFile(file_path, 'r') as zip_handle:
            # 获取Zip内存储的原文件条目(就是代码里写入的原文件路径)
            original_entry = zip_handle.namelist()[0]
            # 读取原文件内容
            original_content = zip_handle.read(original_entry)
            # 先保存为带_restore后缀的备份文件,确认正常后再替换原文件
            restore_path = f"{file_path}_restore"
            with open(restore_path, 'wb') as restore_file:
                restore_file.write(original_content)
            print(f"已恢复:{file_path} -> {restore_path}")
    except zipfile.BadZipFile:
        # 跳过本身不是Zip的文件(可能没被代码处理到)
        print(f"非损坏文件,跳过:{file_path}")
    except Exception as e:
        print(f"处理{file_path}失败:{str(e)}")

注意:先拿几个小文件测试,确认恢复后的文件正常,再批量处理所有文件。

2. 系统还原(最快)

如果你的系统开启了系统还原功能,直接还原到运行这段代码之前的系统还原点,就能一次性恢复所有文件。

3. 专业数据恢复工具(备选)

如果上述方法失效,立刻停止对该磁盘的任何写入操作,用Recuva、Disk Drill这类数据恢复软件扫描磁盘,它们可以通过文件签名识别并恢复被覆盖前的原始文件。

内容的提问来源于stack exchange,提问作者Junesuh Sung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:37:35