Python创建增量目录

需求很简单

比如我在做机器学习实验的时候,实验结果的保存路径是'runs/exp'

这样就会出现一个问题:当我第二次运行程序的时候,如果我忘记更改代码中的路径名或者清除上次实验结果,这次的实验结果会和上次实验结果混在一起,很头疼。

所以我希望在下次实验的时候代码自动创建一个新的目录,如:'runs/exp2',来保存新的实验结果。

代码

粘贴复制,直接照着下面用就行。

下面的函数是我从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

效果如下:
在这里插入图片描述
因为当前目录下已经有了一个’runs/exp’,所以函数increment_path会自动创建增量目录’runs\exp2’并返回新的路径名。


好了,上述就是最常用的使用方法,接下来是我自己的笔记。
1、函数increment_path(path, exist_ok=False, sep='', mkdir=True)的参数含义如下:

  • path: 表示要增量的目录,如:‘runs/exp’
  • exist_ok: 若为True,则不增量路径,直接使用原来的路径。
  • sep: 目录名的分隔符,比如sep=’_’,则返回’runs/exp_2’
  • mkdir: 若为False,则只返回路径名,不会自动创建目录。

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后缀的文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值