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

