From 1a3ecb8b386115fd22129eaf0760157b161efac7 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 28 Apr 2022 14:00:43 -0700 Subject: [PATCH] `increment_path()` robustness improvements (#7628) Improved robustness to filename edge cases like `data/images/zidane.23.jpg` that currently fail. May resolve https://github.com/ultralytics/yolov5/issues/7432 --- utils/general.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/utils/general.py b/utils/general.py index 67f01b54ab88..7c89d02f2d9c 100755 --- a/utils/general.py +++ b/utils/general.py @@ -933,13 +933,24 @@ def increment_path(path, exist_ok=False, sep='', mkdir=False): 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 + + # Method 1 + for n in range(2, 9999): + p = f'{path}{sep}{n}{suffix}' # increment path + if not os.path.exists(p): # + break + path = Path(p) + + # Method 2 (deprecated) + # dirs = glob.glob(f"{path}{sep}*") # similar paths + # matches = [re.search(rf"{path.stem}{sep}(\d+)", 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