前言
上一篇我们学会了Python单个文件的读写、保存日志、CSV表格操作,掌握了基础的数据存储能力。但在实际编程、自动化办公、深度学习YOLO项目中,单个文件操作完全不够用。
我们做目标检测数据集时,经常遇到几百上千张图片、标签文件,需要统一改名、改文件后缀、筛选指定格式文件、清理无效文件,手动操作耗时还容易出错。
本篇手把手教大家掌握Python批量文件处理,全部是零基础可跑的代码,专门适配YOLO数据集预处理场景,学会后彻底告别手动整理数据,大幅提升项目效率。
一、核心模块介绍(无需额外安装)
批量处理文件全程使用Python内置模块,无需pip安装,开箱即用:
os模块:遍历文件夹、获取文件列表、修改文件名、判断文件类型
字符串语法:替换后缀、截取文件名、统一命名格式
所有代码兼容Windows系统,适配图片、txt标签、xml标签等YOLO常用文件格式。
二、基础操作1:遍历文件夹所有文件
这是批量处理的基础,先学会读取文件夹中所有文件名称,后续所有批量操作都基于此实现。
import os # 目标文件夹路径(可替换成自己的数据集路径) file_path = "./images" # 遍历文件夹内所有文件 file_list = os.listdir(file_path) # 打印所有文件名 for file in file_list: print("当前文件:", file)
运行效果:自动读取文件夹下所有图片、标签文件,不会遗漏任何文件,是数据集批量操作的核心基础。
三、基础操作2:批量筛选指定格式文件
YOLO数据集只需要jpg、png、txt、xml格式文件,需要过滤掉文件夹、缓存文件、无效文件,精准筛选目标文件。
import os file_path = "./images" # 定义需要保留的文件格式 suffix_list = [".jpg", ".png", ".txt", ".xml"] for file in os.listdir(file_path): # 获取文件后缀 file_suffix = os.path.splitext(file)[-1] # 筛选指定格式文件 if file_suffix in suffix_list: print("有效数据集文件:", file)
场景用途:清理数据集冗余文件,只保留训练所需素材,避免无效文件干扰数据集标注和训练。
四、实战1:批量统一重命名(YOLO数据集必备)
新手制作数据集时,图片文件名杂乱无章,包含中文、特殊符号、乱序编号,会导致YOLO训练报错。通过代码可批量统一命名,格式规范、有序。
import os path = "./images" # 自定义文件前缀,可根据项目修改 prefix = "hydrogen_detect" # 遍历并重命名 for index, file in enumerate(os.listdir(path)): # 获取旧文件完整路径 old_path = os.path.join(path, file) # 跳过文件夹,只处理文件 if os.path.isdir(old_path): continue # 获取文件后缀,保留原格式 suffix = os.path.splitext(file)[-1] # 定义新文件名:前缀+有序编号+后缀 new_name = f"{prefix}_{index}{suffix}" new_path = os.path.join(path, new_name) # 执行重命名 os.rename(old_path, new_path) print(f"重命名成功:{file} → {new_name}")
重命名后效果:hydrogen_detect_0.jpg、hydrogen_detect_1.jpg,完全适配YOLO数据集命名规范,杜绝命名报错。
五、实战2:批量修改文件后缀
数据集常见问题:图片格式混杂jpg、png,标签格式不统一,可通过代码批量统一后缀,规整数据集格式。
示例:批量将png图片转为jpg格式
import os path = "./images" for file in os.listdir(path): old_path = os.path.join(path, file) if os.path.isdir(old_path): continue # 批量替换png为jpg if file.endswith(".png"): new_name = file.replace(".png", ".jpg") new_path = os.path.join(path, new_name) os.rename(old_path, new_path) print(f"格式转换:{file} → {new_name}")
拓展:可自行修改后缀参数,实现txt转xml、jpeg转jpg等各类格式批量转换。
六、实战3:批量删除指定后缀文件
数据集整理时,需要批量删除缓存文件、多余的txt、xml文件,手动删除效率极低,代码一键清理更高效。
import os path = "./images" for file in os.listdir(path): file_path = os.path.join(path, file) # 批量删除 .txt 文件 if file.endswith(".txt"): os.remove(file_path) print("已删除无效文件:", file)
⚠️ 新手注意:删除前建议备份文件,避免误删有效数据集。
七、实战4:批量统计数据集数量
训练YOLO前,需要统计图片、标签总数,判断数据集体量是否充足,简单代码一键统计:
import os path = "./images" img_count = 0 for file in os.listdir(path): if file.endswith((".jpg", ".png")): img_count += 1 print(f"数据集图片总数量:{img_count} 张")
八、新手批量操作避坑指南
路径问题:尽量使用相对路径,文件夹名称不要包含中文、空格、特殊符号
备份优先:重命名、删除、改后缀前,务必备份数据集,防止数据丢失
区分文件与文件夹:操作时需跳过子文件夹,避免程序报错
统一格式:数据集务必统一图片后缀、命名格式,可大幅减少YOLO训练报错
九、总结
本篇核心收获,掌握4个刚需批量操作技能:
遍历文件夹、筛选指定格式文件,精准梳理数据集
批量统一文件命名,解决YOLO命名报错问题
批量修改文件后缀,规整数据集格式
批量清理、统计文件,高效完成数据集预处理
到这一篇,你已经具备了完整的Python数据处理能力:基础语法、文件读写、批量数据预处理,完全满足YOLO目标检测项目的前期数据准备需求。
下一篇将更新第十一篇:YOLO数据集制作全程详解(标注、划分训练集验证集、生成标签文件),正式衔接深度学习实战!