You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用Python实现数据集文件夹图片管控:保留90张删除多余图片

批量限制数据集子文件夹图片数量至90张

需求说明

我有一个数据集,目录结构包含Train、Test、Val三个主文件夹,每个主文件夹下有100+个子文件夹。需要将每个子文件夹内的图片数量限制为90张,若子文件夹内图片数量超过90张,则删除超出部分。数据集目录结构如下:

| dataset
|   | 
|   | Train
|   |   |
|   |   | Folder (1 of 112)
|   |   |   |
|   |   |   | Images  
|   | Test
|   |   |
|   |   | Folder (1 of 105)
|   |   |   |
|   |   |   | Images
|   | Val
|   |   |
|   |   | Folder (1 of 120)
|   |   |   |
|   |   |   | Images

解决方案

方法1:Python脚本(跨平台通用)

以下脚本会遍历指定根目录下的所有子文件夹,筛选常见格式的图片文件,若数量超过90则删除多余文件。可根据实际情况修改根目录路径和图片格式:

import os
from pathlib import Path

# 数据集根目录,替换为你的实际路径
DATA_ROOT = "./dataset"
# 要保留的图片数量
MAX_IMAGES = 90
# 支持的图片格式,可按需添加
IMAGE_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.bmp', '.gif')

def limit_images_in_folder(folder_path):
    # 获取文件夹内所有图片文件
    image_files = [f for f in Path(folder_path).iterdir() if f.suffix.lower() in IMAGE_EXTENSIONS]
    # 按文件名排序(确保删除固定顺序的多余文件,可修改排序规则)
    image_files.sort()
    
    if len(image_files) > MAX_IMAGES:
        # 计算需要删除的文件数量
        files_to_delete = image_files[MAX_IMAGES:]
        print(f"Folder {folder_path}: 发现{len(image_files)}张图片,将删除{len(files_to_delete)}张")
        # 删除多余文件
        for file in files_to_delete:
            os.remove(file)
    else:
        print(f"Folder {folder_path}: 图片数量{len(image_files)},无需处理")

# 遍历Train、Test、Val三个主文件夹
for main_folder in ['Train', 'Test', 'Val']:
    main_folder_path = os.path.join(DATA_ROOT, main_folder)
    if not os.path.exists(main_folder_path):
        print(f"警告:主文件夹{main_folder_path}不存在,跳过")
        continue
    # 遍历主文件夹下的所有子文件夹
    for sub_folder in os.listdir(main_folder_path):
        sub_folder_path = os.path.join(main_folder_path, sub_folder)
        if os.path.isdir(sub_folder_path):
            limit_images_in_folder(sub_folder_path)

print("处理完成")

使用提示:

  • 运行前务必备份数据集,避免误删
  • 可先将os.remove(file)替换为print(file),预览要删除的文件,确认无误后再执行删除
  • 若需按文件修改时间排序删除,可将image_files.sort()替换为image_files.sort(key=lambda x: x.stat().st_mtime)

方法2:Shell命令(Linux/macOS适用)

如果你使用Linux或macOS,可用以下Shell命令批量处理。替换./dataset为你的数据集根目录:

# 遍历Train、Test、Val文件夹
for main_dir in Train Test Val; do
    # 遍历每个主文件夹下的子文件夹
    for sub_dir in ./dataset/"$main_dir"/*/; do
        # 获取子文件夹内的图片文件(以jpg、png为例,可按需修改)
        image_files=("$sub_dir"*.jpg "$sub_dir"*.png)
        # 过滤不存在的文件
        image_files=("${image_files[@]}"/*.jpg)
        image_files=("${image_files[@]}"/*.png)
        # 计算图片数量
        count=${#image_files[@]}
        
        if [ "$count" -gt 90 ]; then
            echo "处理文件夹: $sub_dir,当前图片数: $count,将删除 $((count-90)) 张"
            ls -1 "$sub_dir"*.jpg "$sub_dir"*.png | sort | tail -n +91 | xargs rm -f
        fi
    done
done

使用提示:

  • 建议先备份数据
  • 可将xargs rm -f替换为xargs echo,预览要删除的文件,确认后再执行删除
  • 若需匹配其他图片格式,添加对应通配符即可(如"$sub_dir"*.jpeg)

内容的提问来源于stack exchange,提问作者mayuresh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:45:33