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

路径未知时使用shutil.move移动文件出现FileNotFoundError的问题

解决跨子目录移动.raw文件的问题

你的判断完全正确——错误根源是文件路径构造错误。os.walk遍历子目录时,变量r代表当前正在遍历的子目录路径,而非初始的根目录path。你之前直接拼接path + '/' + file,相当于默认所有文件都在根目录下,自然找不到子目录里的文件。

修正后的代码

import os
import shutil

path = 'C:/Users/R/Documents/16-2/gsi_14-01-2019'
dest_path = 'C:/Users/R/Documents/Hyperspectral/Datafiles/Raw'

# 确保目标目录存在,不存在则自动创建
os.makedirs(dest_path, exist_ok=True)

# r=当前遍历的子目录路径, d=当前目录下的子目录列表, f=当前目录下的文件列表
for r, d, f in os.walk(path):
    for file in f:
        # 精准匹配.raw扩展名,避免误判类似xxx.raw.txt的文件
        if file.endswith('.raw'):
            # 构造文件的真实完整路径(结合当前子目录)
            src_full_path = os.path.join(r, file)
            dest_full_path = os.path.join(dest_path, file)
            
            # 处理重名文件:自动添加计数器避免覆盖
            counter = 1
            while os.path.exists(dest_full_path):
                filename, ext = os.path.splitext(file)
                dest_full_path = os.path.join(dest_path, f"{filename}_{counter}{ext}")
                counter += 1
            
            shutil.move(src_full_path, dest_full_path)

关键修改说明

  • 正确构造文件路径:用os.path.join(r, file)替代手动拼接路径,既适配不同系统的路径分隔符,又能准确获取子目录中文件的完整路径。
  • 精准匹配扩展名:file.endswith('.raw')比'.raw' in file更严谨,不会误匹配文件名中包含.raw但扩展名不符的文件。
  • 确保目标目录存在:os.makedirs(dest_path, exist_ok=True)提前创建目标目录,避免移动时因目录不存在报错。
  • 处理重名冲突:增加计数器逻辑,若目标目录已有同名文件,自动重命名为文件名_1.raw、文件名_2.raw,防止文件被意外覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:10:29