num.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import os
  2. import shutil
  3. import random
  4. from datetime import datetime
  5. from pathlib import Path
  6. def copy_random_images(source_folder, num_images=1000):
  7. """
  8. 从源文件夹随机抽取指定数量的图片,并复制到以当天日期命名的新文件夹中。
  9. :param source_folder: 源图片文件夹路径
  10. :param num_images: 要抽取的图片数量,默认1000
  11. """
  12. # 支持的图片扩展名
  13. image_extensions = {'.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff', '.webp'}
  14. # 获取当前日期作为目标文件夹名
  15. today = datetime.now().strftime('%Y%m%d')
  16. target_folder = Path(today)
  17. # 检查源文件夹是否存在
  18. source_path = Path(source_folder)
  19. if not source_path.exists():
  20. print(f"错误:源文件夹 '{source_folder}' 不存在。")
  21. return
  22. if not source_path.is_dir():
  23. print(f"错误:'{source_folder}' 不是一个有效的文件夹。")
  24. return
  25. # 获取所有图片文件
  26. image_files = [
  27. f for f in source_path.iterdir()
  28. if f.is_file() and f.suffix.lower() in image_extensions
  29. ]
  30. # 检查图片数量是否足够
  31. if len(image_files) < num_images:
  32. print(f"警告:源文件夹中只有 {len(image_files)} 张图片,少于要求的 {num_images} 张。将复制全部图片。")
  33. num_images = len(image_files)
  34. # 随机抽样
  35. selected_images = random.sample(image_files, num_images)
  36. # 创建目标文件夹
  37. try:
  38. target_folder.mkdir(exist_ok=True)
  39. print(f"目标文件夹 '{today}' 已创建或已存在。")
  40. except Exception as e:
  41. print(f"无法创建目标文件夹 '{today}': {e}")
  42. return
  43. # 复制图片
  44. copied_count = 0
  45. for img_file in selected_images:
  46. try:
  47. shutil.copy2(img_file, target_folder / img_file.name)
  48. copied_count += 1
  49. except Exception as e:
  50. print(f"复制文件 {img_file.name} 时出错: {e}")
  51. print(f"已完成。共复制 {copied_count} 张图片到 '{today}' 文件夹。")
  52. # ================== 使用示例 ==================
  53. if __name__ == "__main__":
  54. # 替换为你的源图片文件夹路径
  55. source_dir = r"D:\data\extracted_frames_500" # ← 修改这里为你自己的路径
  56. copy_random_images(source_dir, 1000)