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

如何用Python查找并删除磁盘损坏文件与文件夹,修复现有代码运行报错

报错原因

OSError: [Errno 5] Input/output error
该报错是触发了磁盘IO异常,对应路径的文件属于磁盘坏道关联文件、或文件系统元数据损坏,原有代码没有异常捕获逻辑,访问损坏文件时直接中断运行。

实现思路
  • 对所有涉及磁盘读写的操作增加异常捕获,不因为单个文件损坏中断整个清理流程
  • 异常捕获覆盖os.path.getsize、os.listdir、os.remove、os.rmdir四个核心操作,所有触发OSError的路径统一标记为损坏待清理对象
  • 保留倒序遍历文件夹删除的逻辑,避免父文件夹删除后子路径访问失效的问题
  • 新增预览验证逻辑,先扫描所有待删除对象,确认后再执行删除操作,避免误删
可直接使用的代码
import os

# 配置项
TARGET_PATH = "//run//media//halovivek//testing"
# 预览模式设为True,仅打印待删除内容不执行实际删除;确认无误后改为False执行删除
DRY_RUN = True

# 存储不同类型的待删除对象
to_delete_empty_files = []
to_delete_empty_dirs = []
to_delete_corrupted = []

# 第一步:扫描空文件和损坏文件
for root, dirs, files in os.walk(TARGET_PATH):
    for file in files:
        src_file = os.path.join(root, file)
        try:
            # 尝试读取文件大小,判断是否为空文件
            if os.path.getsize(src_file) == 0:
                to_delete_empty_files.append(src_file)
        except OSError:
            # 触发IO错误说明文件损坏,加入损坏待删列表
            to_delete_corrupted.append(src_file)

# 第二步:扫描空文件夹和损坏文件夹
dir_list = []
for root, dirs, files in os.walk(TARGET_PATH):
    dir_list.append(root)

# 倒序遍历文件夹
for root in dir_list[::-1]:
    try:
        # 尝试读取文件夹内容
        dir_content = os.listdir(root)
        if not dir_content:
            to_delete_empty_dirs.append(root)
    except OSError:
        # 触发IO错误说明文件夹损坏,加入损坏待删列表
        to_delete_corrupted.append(root)

# 打印扫描结果
print("=== 扫描结果 ===")
print(f"待删除空文件:{len(to_delete_empty_files)} 个")
print(f"待删除空文件夹:{len(to_delete_empty_dirs)} 个")
print(f"待删除损坏文件/文件夹:{len(to_delete_corrupted)} 个")

if DRY_RUN:
    print("\n当前为预览模式,以下是待删除列表:")
    print("\n空文件:")
    for f in to_delete_empty_files:
        print(f)
    print("\n空文件夹:")
    for d in to_delete_empty_dirs:
        print(d)
    print("\n损坏文件/文件夹:")
    for c in to_delete_corrupted:
        print(c)
else:
    # 执行删除操作
    print("\n开始执行删除操作...")
    # 先删文件
    for f in to_delete_empty_files + to_delete_corrupted:
        try:
            if os.path.isfile(f):
                os.remove(f)
                print(f"已删除文件:{f}")
        except Exception as e:
            print(f"删除文件失败 {f}:{str(e)}")
    # 再倒序删文件夹
    for d in to_delete_empty_dirs[::-1] + to_delete_corrupted[::-1]:
        try:
            if os.path.isdir(d):
                os.rmdir(d)
                print(f"已删除文件夹:{d}")
        except Exception as e:
            print(f"删除文件夹失败 {d}:{str(e)}")
    print("删除操作执行完成")
使用注意事项
  • 首次运行请保持DRY_RUN = True,确认待删除列表无误后再修改为False执行实际删除
  • 如果删除损坏文件时仍报错,可先对目标磁盘执行文件系统修复(Linux下执行fsck命令,Windows下执行磁盘错误检查)后再运行代码
  • 正在被系统或其他程序占用的文件也会触发访问异常,删除前请确认对应文件确实无保留必要

内容的提问来源于stack exchange,提问作者vivek rajagopalan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:54:00