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

Python使用shutil.copyfile()遇FileNotFoundError求助(Google Colab)

解决shutil.copyfile()触发FileNotFoundError的路径格式问题

问题场景

在Google Colab环境下执行文件复制操作时,已提前创建目标文件夹及子目录,但调用shutil.copyfile()时出现FileNotFoundError,核心原因是路径中同时混合了反斜杠(\)和斜杠(/),导致系统无法识别正确的文件路径。

原代码及报错信息

原代码:

original = 'Users\\Jonathan\\Documents\\datas'
base_direct = 'Users\\Jonathan\\Documents\\dataset'
os.mkdir(base_direct)
train_dir = os.path.join(base_direct, 'train')
os.mkdir(train_dir)
train_cats_dir = os.path.join(train_dir, 'cats')
os.mkdir(train_cats_dir)
fnames = ['cat.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:
  src = os.path.join(original, fname)
  dst = os.path.join(train_cats_dir, fname)
  shutil.copyfile(src, dst)

报错信息:

FileNotFoundError: [Errno 2] No such file or directory: 'Users\\Jonathan\\Documents\\datas/cat.0.jpg'

问题原因

手动定义的初始路径使用了Windows风格的转义反斜杠\\,但Colab基于Linux环境,os.path.join()会自动使用Linux风格的正斜杠/拼接文件名,最终生成的路径混合了两种分隔符,导致系统无法定位到目标文件。

解决方案

方案1:直接使用正斜杠定义初始路径(推荐)

适配Colab的Linux环境,统一用正斜杠/书写路径:

original = 'Users/Jonathan/Documents/datas'
base_direct = 'Users/Jonathan/Documents/dataset'

方案2:用os.path.normpath()统一路径格式

如果必须保留原路径写法,可通过os.path.normpath()自动转换为当前系统的标准路径格式:

original = os.path.normpath('Users\\Jonathan\\Documents\\datas')
base_direct = os.path.normpath('Users\\Jonathan\\Documents\\dataset')

额外注意(Colab特有)

如果操作的是Google Drive中的文件,必须先挂载Drive,路径需以/content/drive/MyDrive/开头,比如:

original = '/content/drive/MyDrive/Users/Jonathan/Documents/datas'

修复后的完整代码

import os
import shutil

# 统一使用正斜杠定义路径
original = 'Users/Jonathan/Documents/datas'
base_direct = 'Users/Jonathan/Documents/dataset'

# 使用os.makedirs并设置exist_ok=True,避免文件夹已存在时报错
os.makedirs(base_direct, exist_ok=True)
train_dir = os.path.join(base_direct, 'train')
os.makedirs(train_dir, exist_ok=True)
train_cats_dir = os.path.join(train_dir, 'cats')
os.makedirs(train_cats_dir, exist_ok=True)

fnames = ['cat.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:
    src = os.path.join(original, fname)
    dst = os.path.join(train_cats_dir, fname)
    shutil.copyfile(src, dst)

内容的提问来源于stack exchange,提问作者Alhaji Balla Fofanah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:54:32