猫狗数据集精简:如何用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
相关产品推荐
相关产品推荐

