import os import shutil import random from datetime import datetime from pathlib import Path def copy_random_images(source_folder, num_images=1000): """ 从源文件夹随机抽取指定数量的图片,并复制到以当天日期命名的新文件夹中。 :param source_folder: 源图片文件夹路径 :param num_images: 要抽取的图片数量,默认1000 """ # 支持的图片扩展名 image_extensions = {'.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff', '.webp'} # 获取当前日期作为目标文件夹名 today = datetime.now().strftime('%Y%m%d') target_folder = Path(today) # 检查源文件夹是否存在 source_path = Path(source_folder) if not source_path.exists(): print(f"错误:源文件夹 '{source_folder}' 不存在。") return if not source_path.is_dir(): print(f"错误:'{source_folder}' 不是一个有效的文件夹。") return # 获取所有图片文件 image_files = [ f for f in source_path.iterdir() if f.is_file() and f.suffix.lower() in image_extensions ] # 检查图片数量是否足够 if len(image_files) < num_images: print(f"警告:源文件夹中只有 {len(image_files)} 张图片,少于要求的 {num_images} 张。将复制全部图片。") num_images = len(image_files) # 随机抽样 selected_images = random.sample(image_files, num_images) # 创建目标文件夹 try: target_folder.mkdir(exist_ok=True) print(f"目标文件夹 '{today}' 已创建或已存在。") except Exception as e: print(f"无法创建目标文件夹 '{today}': {e}") return # 复制图片 copied_count = 0 for img_file in selected_images: try: shutil.copy2(img_file, target_folder / img_file.name) copied_count += 1 except Exception as e: print(f"复制文件 {img_file.name} 时出错: {e}") print(f"已完成。共复制 {copied_count} 张图片到 '{today}' 文件夹。") # ================== 使用示例 ================== if __name__ == "__main__": # 替换为你的源图片文件夹路径 source_dir = r"D:\data\extracted_frames_500" # ← 修改这里为你自己的路径 copy_random_images(source_dir, 1000)