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

Python随机复制文件触发FileNotFoundError问题求助

你完全猜对了!这个FileNotFoundError的罪魁祸首就是你拿到的只是文件名,不是文件的完整路径。

当你用os.listdir(root_src)时,它返回的只是文件夹里的文件名/子目录名的字符串列表,比如'file-12.jpg',并没有带上前面的D:\Downloads路径。之后你直接把这个文件名传给copyfile,Python会默认在当前运行脚本的工作目录下去找这个文件,而不是你指定的源文件夹,自然就找不到了。

给你修正后的完整代码

import os
import random
from shutil import copyfile

# 源文件夹路径(用r前缀避免转义字符问题)
root_src = r'D:\Downloads'
# 获取源文件夹下所有文件的完整路径
all_files = [os.path.join(root_src, filename) for filename in os.listdir(root_src)]
# 过滤掉子文件夹,只保留真正的文件(可选但很实用)
valid_files = [f for f in all_files if os.path.isfile(f)]

if not valid_files:
    print("源文件夹里没有可复制的文件哦")
else:
    # 随机选一个带完整路径的文件
    picked_file = random.choice(valid_files)
    # 目标文件夹路径
    target_folder = os.path.join(root_src, 'new')
    # 确保目标文件夹存在,不存在就自动创建
    os.makedirs(target_folder, exist_ok=True)
    # 生成目标文件的完整路径(保留原文件名)
    target_path = os.path.join(target_folder, os.path.basename(picked_file))
    # 执行复制操作
    copyfile(picked_file, target_path)

关键修改说明

  • 拼接完整路径:用os.path.join(root_src, filename)把每个文件名和源路径拼接,这样random.choice拿到的是直接能访问的完整文件路径,不会再出现找不到文件的问题。
  • 过滤文件:添加os.path.isfile(f)过滤掉子文件夹,避免不小心选中文件夹导致复制出错。
  • 确保目标文件夹存在:用os.makedirs(target_folder, exist_ok=True)自动创建目标文件夹,如果它已经存在也不会报错,避免因为文件夹不存在而触发新的错误。
  • 修复目标路径:原来的代码里new_path没有定义,这里用os.path.basename(picked_file)提取原文件名,保证复制后的文件和原文件同名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:40