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

猫狗数据集精简:如何用Python高效随机删除指定数量文件?

嘿,你的需求其实可以通过封装通用逻辑+跨平台路径处理来大幅简化代码,而且还能让它同时兼容Ubuntu和Windows系统。我来给你优化一下:

首先,你的现有代码已经能实现功能,但存在重复逻辑(猫狗文件夹处理代码几乎一样),而且手动拼接路径容易在Windows上出问题。咱们可以把核心逻辑抽成一个函数,再用pathlib来处理路径,这样代码更干净、更通用。

优化后的代码方案

import os
import random
from pathlib import Path

def keep_n_files(folder_path, keep_count=2000):
    # 将路径转为Path对象,自动适配跨平台路径分隔符
    folder = Path(folder_path)
    # 获取文件夹下所有文件(排除子文件夹,只保留文件)
    all_files = [f for f in folder.iterdir() if f.is_file()]
    
    # 如果文件总数已经小于等于要保留的数量,直接返回
    if len(all_files) <= keep_count:
        print(f"文件夹 {folder_path} 中的文件数量已少于或等于 {keep_count},无需删除")
        return
    
    # 计算需要删除的文件数量,随机选择要删除的文件
    delete_count = len(all_files) - keep_count
    files_to_delete = random.sample(all_files, delete_count)
    
    # 批量删除文件
    for file in files_to_delete:
        try:
            os.remove(file)
            print(f"已删除文件: {file}")
        except OSError as e:
            print(f"删除文件 {file} 失败: {e}")

# 调用函数处理猫狗文件夹
keep_n_files('dogs')
keep_n_files('cats')

代码亮点说明

  • 跨平台兼容:用pathlib.Path处理路径,自动识别Windows的\和Linux的/,不用手动拼接路径字符串。
  • 逻辑复用:把删除逻辑封装成函数,处理多个文件夹只需要调用两次,避免重复代码。
  • 健壮性提升:加入了文件数量判断(如果文件本来就少于2000就不操作),还有异常捕获,避免单个文件删除失败导致整个脚本终止。
  • 轻量无依赖:用Python标准库的random.sample代替numpy.random.choice,不需要额外安装numpy,更轻量化。

安全提示

  • 执行删除操作前,一定要先备份数据集!可以先把os.remove(file)改成print(file),先预览要删除的文件,确认无误后再执行删除。
  • 如果你的文件夹里有子文件夹,代码里的f.is_file()会自动跳过它们,只处理文件,避免误删文件夹。

内容的提问来源于stack exchange,提问作者Mohamed Thasin ah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:53:25