Python創(chuàng)建增量目錄的代碼實例
需求很簡單
比如我在做機器學習實驗的時候,實驗結果的保存路徑是'runs/exp'。
這樣就會出現(xiàn)一個問題:當我第二次運行程序的時候,如果我忘記更改代碼中的路徑名或者清除上次實驗結果,這次的實驗結果會和上次實驗結果混在一起,很頭疼。
所以我希望在下次實驗的時候代碼自動創(chuàng)建一個新的目錄,如:'runs/exp2',來保存新的實驗結果。
代碼
粘貼復制,直接照著下面用就行。
下面的函數(shù)是我從yolo5里復制過來的,代碼質量很高,魯棒性很高,可以放心使用。
from pathlib import Path
import re
import glob
def increment_path(path, exist_ok=False, sep='', mkdir=True):
"""
Increment file or directory path, i.e. runs/exp --> runs/exp{sep}2, runs/exp{sep}3, ... etc.
:param path: file or directory path to increment
:param exist_ok: existing project/name ok, do not increment
:param sep: separator for directory name
:param mkdir: create directory
:return: incremented path
"""
path = Path(path) # os-agnostic
if path.exists() and not exist_ok:
suffix = path.suffix
path = path.with_suffix('')
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}") # update path
dir_ = path if path.suffix == '' else path.parent # directory
if not dir_.exists() and mkdir:
dir_.mkdir(parents=True, exist_ok=True) # make directory
return path
使用方法
path = 'runs/exp' # 定義你的路徑名,比如我的是'runs/exp' path = increment_path(path) print(path) # 打印輸出 runs\exp2
效果如下:

因為當前目錄下已經(jīng)有了一個’runs/exp’,所以函數(shù)increment_path會自動創(chuàng)建增量目錄’runs\exp2’并返回新的路徑名。
好了,上述就是最常用的使用方法,接下來是我自己的筆記。
1、函數(shù)increment_path(path, exist_ok=False, sep='', mkdir=True)的參數(shù)含義如下:
- path: 表示要增量的目錄,如:‘runs/exp’
- exist_ok: 若為True,則不增量路徑,直接使用原來的路徑。
- sep: 目錄名的分隔符,比如sep=’_’,則返回’runs/exp_2’
- mkdir: 若為False,則只返回路徑名,不會自動創(chuàng)建目錄。
2、其他筆記
pathlib.Path
from pathlib import Path
path = Path(path)
path.suffix # 表示獲取文件后綴名
path.with_suffix('') # 表示更改文件后綴名為''
path.stem # 返回文件名,不帶后綴glob.glob
import glob glob.glob(f"./data/*.jpg") # 找到./data/目錄下所有.jpg后綴的文件
總結
到此這篇關于Python創(chuàng)建增量目錄的文章就介紹到這了,更多相關Python創(chuàng)建增量目錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

