1
-
遍历
G:\Data\train下所有以数字命名的子文件夹。 -
在每个子文件夹的
spoof目录中,随机抽取 1 张图像(由images_per_folder=1控制)。 -
将所选图像复制到
H:\copy,并在文件名前加上原子文件夹名作为前缀以防重名。
示例
-
源目录结构(执行前)
G:\Data\train
├─ 1001
│ └─ spoof
│ ├─ a.jpg
│ ├─ b.jpg
│ └─ c.jpg
├─ 1002
│ └─ spoof
│ ├─ x.png
│ └─ y.png
└─ other_folder (因非数字命名,将被跳过)
-
目标目录(执行后)
H:\copy
├─ 1001_b.jpg ← 从 1001\spoof 随机抽取 b.jpg,并重命名为 1001_b.jpg
├─ 1002_x.png ← 从 1002\spoof 随机抽取 x.png,并重命名为 1002_x.png
控制台输出示例:
[完成] 从 G:\Data\train\1001\spoof 复制 1 张图片
[完成] 从 G:\Data\train\1002\spoof 复制 1 张图片
✅ 所有 spoof 图像复制完成!
1
import os
import shutil
import random
# 源数据根目录(train)
source_root = r'G:\Data\train'
# 目标目录(你可以改成任意你想要保存的路径)
target_dir = r'H:\copy'
# 每个 spoof 文件夹选多少张图
images_per_folder = 1
# 确保目标目录存在
os.makedirs(target_dir, exist_ok=True)
# 遍历所有数字子文件夹
for subfolder_name in os.listdir(source_root):
subfolder_path = os.path.join(source_root, subfolder_name)
# 判断是否为数字命名的文件夹
if not subfolder_name.isdigit():
continue
spoof_path = os.path.join(subfolder_path, 'spoof')
if not os.path.exists(spoof_path):
print(f"[跳过] 未找到 spoof 文件夹: {spoof_path}")
continue
# 获取所有图像文件(你可以加 .jpg 过滤)
image_files = [f for f in os.listdir(spoof_path) if os.path.isfile(os.path.join(spoof_path, f))]
if len(image_files) < images_per_folder:
print(f"[跳过] 图片不足 {images_per_folder} 张: {spoof_path}")
continue
selected_images = random.sample(image_files, images_per_folder)
for img_name in selected_images:
src = os.path.join(spoof_path, img_name)
# 防止文件重名,加入文件夹前缀
dst = os.path.join(target_dir, f"{subfolder_name}_{img_name}")
shutil.copy2(src, dst)
print(f"[完成] 从 {spoof_path} 复制 1 张图片")
print("\n✅ 所有 spoof 图像复制完成!")
1
指定文件夹随机筛选图像
1450

被折叠的 条评论
为什么被折叠?



