自动构建文件(exp->exp1->exp2方式,increment_path函数)
这里,我将介绍一个函数用于文件夹重复筛选,该函数来源yolov5,以v5举例,训练exp文件,若遇到存在exp就建立exp2路径。我觉得这个功能比较实用,代码也比较少。我作为记录写于博客,便于快速复用。
increment_path函数
该函数来源yolov5,用于一个文件夹不重复文件构建,很适合重复保留内容而重复构建文件夹方式,该代码如下:
from pathlib import Path import glob import re def increment_path(path, exist_ok=False, sep='', mkdir=False): # Increment file or directory path, i.e. runs/exp --> runs/exp{sep}2, runs/exp{sep}3, ... etc. path = Path(path) # os-agnostic if path.exists() and not exist_ok: path, suffix = (path.with_suffix(''), path.suffix) if path.is_file() else (path, '') dirs = glob.glob(f"{path}{sep}*") # similar paths matches = [re.search(rf"%s{sep}(\d+)" % path.stem, d) for d in dirs] i = [int(m.groups()[0]) for m in matches if m] # indices n = max(i) + 1 if i else 2 # increment number path = Path(f"{path}{sep}{n}{suffix}") # increment path if mkdir: path.mkdir(parents=True, exist_ok=True) # make directory return path 整个源码使用demo
这里,我直接给一个demo,用于构建文件夹,代码如下:
from pathlib import Path import glob import re def increment_path(path, exist_ok=False, sep='', mkdir=False): # Increment file or directory path, i.e. runs/exp --> runs/exp{sep}2, runs/exp{sep}3, ... etc. path = Path(path) # os-agnostic if path.exists() and not exist_ok: path, suffix = (path.with_suffix(''), path.suffix) if path.is_file() else (path, '') dirs = glob.glob(f"{path}{sep}*") # similar paths matches = [re.search(rf"%s{sep}(\d+)" % path.stem, d) for d in dirs] i = [int(m.groups()[0]) for m in matches if m] # indices n = max(i) + 1 if i else 2 # increment number path = Path(f"{path}{sep}{n}{suffix}") # increment path if mkdir: path.mkdir(parents=True, exist_ok=True) # make directory return path def build_dir( out_dir): # 构建文件 import os if not os.path.exists(out_dir): os.makedirs(out_dir) return out_dir if __name__ == '__main__': p='run/exp' build_dir(p) save_dir = str(increment_path(Path(p), exist_ok=False)) print(save_dir) 结果
结果如下:
结果如下: