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

Python批量迁移文件时捕获文件未找到错误并继续执行的问题解决

解决文件迁移时跳过已迁移文件的问题

嘿,我来帮你搞定这个问题!你的核心问题是把try-except块放在了整个while循环外面,一旦某个文件迁移出错,整个循环就直接终止了。我们需要把异常捕获逻辑移到循环内部,让每个文件的移动操作都能独立处理错误,这样就算某个文件出问题,程序也能继续处理剩下的文件。

另外你的代码还有几个小细节可以优化,比如路径拼接的安全性、提前检查文件是否存在,避免不必要的异常触发。下面是修改后的完整代码:

import os, shutil

# 用原始字符串避免Windows路径的转义问题,或者换成双反斜杠 "I:\\"
path = r"I:\\"
# 注意:原代码里源和目标路径完全一致,这会导致无意义的移动,建议改成实际目标文件夹
moveto = r"I:\target_folder\\" 

i = 1
j = 1

while True:
    # 构建完整文件名
    filename = f"{i}.{j}.jpg"
    # 用os.path.join安全拼接路径,适配不同系统的路径分隔符
    src_path = os.path.join(path, filename)
    dst_path = os.path.join(moveto, filename)

    # 先检查源文件是否存在,提前跳过已迁移或不存在的文件
    if not os.path.exists(src_path):
        print(f"文件 {filename} 不存在,跳过")
        # 直接调整计数进入下一轮循环
        j += 1
        if j > 6:
            i += 1
            j = 1
        if i > 1500:
            break
        continue

    try:
        shutil.move(src_path, dst_path)
        print(f"成功迁移文件: {filename}")
    except OSError as e:
        print(f"迁移文件 {filename} 出错: {str(e)},继续处理下一个")

    # 调整计数,处理下一个文件
    j += 1
    if j > 6:
        i += 1
        j = 1
    if i > 1500:
        break

关键改动说明:

  • 异常捕获范围调整:把try-except放到循环内部,只针对单个文件的移动操作捕获异常,这样单个文件出错不会终止整个迁移流程。
  • 安全路径拼接:用os.path.join代替直接字符串拼接路径,避免手动拼接时的分隔符错误,同时适配不同操作系统。
  • 提前检查文件存在性:在尝试移动前先判断源文件是否存在,减少不必要的异常触发,也能直接跳过已迁移的文件。
  • 增加日志提示:打印每个文件的处理状态,方便你追踪迁移进度和出错情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:52:40