如何解决Google Colab中shutil.copy出现的FileNotFoundError错误
解决Google Colab中shutil.copyfile的FileNotFoundError问题
核心问题拆解
从报错信息和代码细节来看,导致错误的关键原因有三个:
- 路径拼写不一致:
flooding_folder中的LR_PyTprch_API_Ray_Tune拼写错误,正确应为LR_PyTorch_API_Ray_Tune(与no_flooding_folder的前缀保持一致) - 目标参数类型错误:
shutil.copyfile的第二个参数必须是完整的目标文件路径,不能仅传入文件夹路径 - 目标文件夹未预创建:如果目标目录本身不存在,直接执行复制操作会触发找不到路径的错误
修正后的完整代码
import os import shutil # 修正路径拼写错误,确保两个文件夹路径前缀一致 flooding_folder = '/content/drive/MyDrive/Learning/LR_PyTorch_API_Ray_Tune/input/images/flooding/' no_flooding_folder = '/content/drive/MyDrive/Learning/LR_PyTorch_API_Ray_Tune/input/images/no_flooding/' # 预创建目标文件夹,exist_ok=True避免重复创建时触发报错 os.makedirs(flooding_folder, exist_ok=True) os.makedirs(no_flooding_folder, exist_ok=True) for file in s1_file_list: for directory in os.listdir(source_dir_1): src_file = os.path.join(source_dir_1, directory, file) # 先校验源文件是否存在,避免额外报错 if not os.path.exists(src_file): print(f"跳过不存在的源文件:{src_file}") continue if file[:-7] in labels_flood: # 拼接完整的目标文件路径:文件夹路径 + 文件名 dst_file = os.path.join(flooding_folder, file) shutil.copyfile(src_file, dst_file) else: dst_file = os.path.join(no_flooding_folder, file) shutil.copyfile(src_file, dst_file)
额外验证与排查步骤
如果问题仍存在,可执行以下命令确认路径状态:
- 检查目标父目录是否存在:
!ls -l "/content/drive/MyDrive/Learning/LR_PyTorch_API_Ray_Tune/input/images/"
- 若目录不存在,手动创建完整路径:
!mkdir -p "/content/drive/MyDrive/Learning/LR_PyTorch_API_Ray_Tune/input/images/flooding/" "/content/drive/MyDrive/Learning/LR_PyTorch_API_Ray_Tune/input/images/no_flooding/"
内容的提问来源于stack exchange,提问作者mountainscaler
相关产品推荐
相关产品推荐

