網(wǎng)站首頁 編程語言 正文
需求很簡(jiǎn)單
比如我在做機(jī)器學(xué)習(xí)實(shí)驗(yàn)的時(shí)候,實(shí)驗(yàn)結(jié)果的保存路徑是'runs/exp'
。
這樣就會(huì)出現(xiàn)一個(gè)問題:當(dāng)我第二次運(yùn)行程序的時(shí)候,如果我忘記更改代碼中的路徑名或者清除上次實(shí)驗(yàn)結(jié)果,這次的實(shí)驗(yàn)結(jié)果會(huì)和上次實(shí)驗(yàn)結(jié)果混在一起,很頭疼。
所以我希望在下次實(shí)驗(yàn)的時(shí)候代碼自動(dòng)創(chuàng)建一個(gè)新的目錄,如:'runs/exp2'
,來保存新的實(shí)驗(yàn)結(jié)果。
代碼
粘貼復(fù)制,直接照著下面用就行。
下面的函數(shù)是我從yolo5里復(fù)制過來的,代碼質(zhì)量很高,魯棒性很高,可以放心使用。
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
效果如下:
因?yàn)楫?dāng)前目錄下已經(jīng)有了一個(gè)’runs/exp’,所以函數(shù)increment_path
會(huì)自動(dòng)創(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,則只返回路徑名,不會(huì)自動(dòng)創(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后綴的文件
總結(jié)
原文鏈接:https://blog.csdn.net/qq_38237214/article/details/121497371
相關(guān)推薦
- 2022-09-27 React?Native?中限制導(dǎo)入某些組件和模塊的方法_React
- 2023-12-16 六個(gè)開發(fā)者必知必會(huì)的Git命令
- 2022-04-09 Python中變量的作用域詳解_python
- 2022-08-23 python3.7安裝matplotlib失敗問題的完美解決方法_python
- 2022-04-06 Go?字符串比較的實(shí)現(xiàn)示例_Golang
- 2022-09-29 Python模塊域名dnspython解析_python
- 2023-03-23 python實(shí)現(xiàn)簡(jiǎn)易連點(diǎn)器_python
- 2022-10-30 Django視圖層與模板層實(shí)例詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支