日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Python創(chuàng)建增量目錄的代碼實(shí)例_python

作者:Jnchin ? 更新時(shí)間: 2022-12-24 編程語言

需求很簡(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

欄目分類
最近更新