技术问询:如何从source_folder随机复制500张图片至目标文件夹
完善代码实现随机选取并复制图片
方案一:直接从源文件夹读取图片路径
如果无需依赖给定的图片名称列表,直接从文件夹读取的方式更健壮,能自动适配文件夹内的实际图片:
import glob import random import shutil import os # 定义源文件夹和目标文件夹路径 source_dir = "./source_folder" target_dir = "./target_folder" # 确保目标文件夹存在,不存在则自动创建 os.makedirs(target_dir, exist_ok=True) # 获取源文件夹下所有jpg格式图片的完整路径 all_images = glob.glob(os.path.join(source_dir, "*.jpg")) # 随机选取500张不重复的图片 selected_images = random.sample(all_images, 500) # 批量复制选中的图片到目标文件夹 for img_path in selected_images: img_filename = os.path.basename(img_path) target_img_path = os.path.join(target_dir, img_filename) shutil.copy(img_path, target_img_path)
方案二:基于给定的图片名称列表处理
如果必须使用你提供的图片名称列表,可使用以下代码,同时增加了文件存在检查避免报错:
import random import shutil import os # 你的图片名称列表 image_list = ['1.jpg', '2.jpg', '3.jpg', ..., '1200.jpg'] source_dir = "./source_folder" target_dir = "./target_folder" # 确保目标文件夹存在 os.makedirs(target_dir, exist_ok=True) # 从列表中随机选500个不重复的文件名 selected_filenames = random.sample(image_list, 500) for filename in selected_filenames: source_path = os.path.join(source_dir, filename) # 检查源文件是否存在,避免因列表中存在无效文件名导致报错 if os.path.exists(source_path): target_path = os.path.join(target_dir, filename) shutil.copy(source_path, target_path)
关键改进说明
- 替换原代码中
random.choice的用法:random.sample可一次性选取指定数量的不重复元素,比循环选单个元素更高效且不会出现重复选取的问题 - 新增
os.makedirs确保目标文件夹存在,避免复制时抛出文件夹不存在的异常 - 使用
os.path.join拼接路径,适配Windows、Linux等不同操作系统的路径格式 - 导入
shutil模块实现文件复制,这是Python处理文件复制的标准工具
内容的提问来源于stack exchange,提问作者A.j
相关产品推荐
相关产品推荐

