Skip to content

Commit 237cc63

Browse files
authored
Fix increment_path() explicit file vs dir handling (ultralytics#5523)
Resolves ultralytics#5341 (comment) Tests: ```python import glob import re from pathlib import Path 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 print(increment_path('runs')) print(increment_path('export.py')) print(increment_path('abc.def.dir')) print(increment_path('abc.def.file')) ```
1 parent ee9cbdd commit 237cc63

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

utils/general.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -830,13 +830,12 @@ def increment_path(path, exist_ok=False, sep='', mkdir=False):
830830
# Increment file or directory path, i.e. runs/exp --> runs/exp{sep}2, runs/exp{sep}3, ... etc.
831831
path = Path(path) # os-agnostic
832832
if path.exists() and not exist_ok:
833-
suffix = path.suffix
834-
path = path.with_suffix('')
833+
path, suffix = (path.with_suffix(''), path.suffix) if path.is_file() else (path, '')
835834
dirs = glob.glob(f"{path}{sep}*") # similar paths
836835
matches = [re.search(rf"%s{sep}(\d+)" % path.stem, d) for d in dirs]
837836
i = [int(m.groups()[0]) for m in matches if m] # indices
838837
n = max(i) + 1 if i else 2 # increment number
839-
path = Path(f"{path}{sep}{n}{suffix}") # update path
838+
path = Path(f"{path}{sep}{n}{suffix}") # increment path
840839
if mkdir:
841840
path.mkdir(parents=True, exist_ok=True) # make directory
842841
return path

0 commit comments

Comments
 (0)