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

