随机选取文件触发FileNotFoundError错误的技术求助
随机选取文件提示“文件不存在”的修复方案
问题根源
os.listdir() 仅返回目标目录内的纯文件名,不包含文件所在的完整路径。直接用这些文件名调用open()时,程序会在当前工作目录(而非media/images或media/videos目录)下查找文件,导致找不到目标文件。
修复方法
方法1:拼接完整文件路径(推荐)
通过os.path.join()将目录路径与文件名拼接,生成完整的文件路径后再打开:
import os import random # 定义目标目录路径(使用完整路径则写"D:/folder/media/videos") video_dir = "media/videos" image_dir = "media/images" # 获取带完整路径的文件列表 video_files = [os.path.join(video_dir, filename) for filename in os.listdir(video_dir)] image_files = [os.path.join(image_dir, filename) for filename in os.listdir(image_dir)] # 随机选取并打开文件 random1 = open(random.choice(video_files)) random2 = open(random.choice(image_files)) random3 = open(random.choice(image_files))
方法2:切换工作目录(不推荐)
先切换到目标文件所在目录,再执行文件操作:
import os import random # 切换到视频目录 os.chdir("media/videos") video_files = os.listdir() random1 = open(random.choice(video_files)) # 切换到图片目录 os.chdir("../images") image_files = os.listdir() random2 = open(random.choice(image_files)) random3 = open(random.choice(image_files))
额外注意事项
- 若目标目录包含子文件夹,需过滤掉非文件项,避免
open()报错:image_files = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if os.path.isfile(os.path.join(image_dir, f))] - 使用完整路径时,直接替换
video_dir和image_dir的值即可,os.path.join会自动适配系统路径分隔符。
内容的提问来源于stack exchange,提问作者user18589820
相关产品推荐
相关产品推荐

