• Python创建增量目录的代码实例


    1、需求很简单

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

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

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

    2、代码

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

    下面的函数是我从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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    3、使用方法

    path = 'runs/exp'  # 定义你的路径名,比如我的是'runs/exp'
    path = increment_path(path)
    print(path)  # 打印输出 runs\exp2
    
    
    • 1
    • 2
    • 3
    • 4

    效果如下:

    在这里插入图片描述
    因为当前目录下已经有了一个’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  # 返回文件名,不带后缀
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    glob.glob

    import glob
    
    glob.glob(f"./data/*.jpg")  # 找到./data/目录下所有.jpg后缀的文件
    
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    Kubernetes 的未来:通过生成式 AI 实现的潜在改进
    How to install a specific version of a package in R
    [python] Python日志记录库loguru使用指北
    区间内的真素数问题(C#)
    企业应用架构研究系列二十八:身份认证 Beginning Out With IdentityServer4
    算法通关村-----归并排序
    MySQL 全局锁、表级锁、行锁详解
    数据结构教程(第五版 李春葆 上机实验题4 验证性实验)
    人工智能数学课高等数学线性微积分数学教程笔记(3. 线性代数基础)
    【TensorFlow Hub】:有 100 个预训练模型等你用
  • 原文地址:https://blog.csdn.net/weixin_45841831/article/details/128079694