指定文件夹按指定数量分组文件
背景和环境说明
本程序使用
python 3.10+
机器学习,打标中需要对数据集进行分批次,比如10个人,需要分10组,熟练的人分多个点等情况。需要对标注的图片
进行分组,分批次导入标注系统进行标注。
依赖包下载
pip install -U NStudyPy
使用
from NStudyPy import PyFileif __name__ == '__main__': PyFile.random_split_s(source_dir=r'F:\temp\cards', target_dir=r'F:\temp\target', s=(100, 400, 250, 250))
分组后 在
F:\temp\target
文件夹下面 有4个文件夹,分别对应100, 400, 250, 250
分组。文件数目太少会提前退出。
核心源码
def random_split_s(source_dir: str, target_dir: str, s=(100, 400, 250, 250)) -> None:"""随机拆分文件; 不处理子文件夹:param source_dir: 源文件夹:param target_dir: 目标文件夹:param s: 拆分个数 (100, 400, 250, 250) 是每个分组的个数,直至所有文件都拆分完毕:return: None"""files = os.listdir(source_dir)random.shuffle(files)sum_s = 0for idx, count in enumerate(s):_no = f'{idx:03}'image_g_dir = os.path.join(target_dir, _no)if not os.path.exists(image_g_dir):os.makedirs(image_g_dir)for file_name in files[sum_s:sum_s + count]:shutil.copy(os.path.join(source_dir, file_name), os.path.join(image_g_dir, file_name))sum_s += countif sum_s >= len(files):break# Done it