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
相关产品推荐
相关产品推荐

