深度学习中存储结果、保存训练日志

YOLOV5中的代码,定义一个increment_path类

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

传入的参数含义如下:

  • 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  # 返回文件名,不带后缀

3、glob.glob

import glob

glob.glob(f"./data/*.jpg")  # 找到./data/目录下所有.jpg后缀的文件

保存文本信息: 

path = 'runs/exp'  # 定义你的路径名,比如我的是'runs/exp'
    path = increment_path(path);

    # 在路径中创建一个文件
    result_file = path / "result.txt"  # 在path目录下创建result.txt文件

    # 将结果保存到文件中
    with open(result_file, "w") as file:
        # 将您的结果写入文件,例如:
        file.write("kmeans: " + " ".join([f"[{int(i[0])}, {int(i[1])}]" for i in k]) + "\n")
        file.write(f"fitness: {f:.5f}, best possible recall: {bpr:.5f}\n")
        file.write("genetic: " + " ".join([f"[{int(i[0])}, {int(i[1])}]" for i in k]) + "\n")
        file.write(f"fitness: {f:.5f}, best possible recall: {bpr:.5f}\n")

    print(f"Results saved at: {result_file}")

 如果是保存文件有两种方式:

法一:

from PIL import Image  # 如果您使用Pillow库

# 假设您有一张名为 'result_image.jpg' 的图像,可以将其保存到指定路径
image = Image.open('result_image.jpg')  # 打开图像文件
image.save(path / 'saved_image.jpg')  # 保存图像到指定路径

print(f"Image saved at: {path / 'saved_image.jpg'}")

法二:

import cv2

# 假设您有一张名为 'result_image.jpg' 的图像,可以将其保存到指定路径
image = cv2.imread('result_image.jpg')  # 读取图像文件
cv2.imwrite(str(path / 'saved_image.jpg'), image)  # 保存图像到指定路径

print(f"Image saved at: {path / 'saved_image.jpg'}")

注意:cv2.imwrite()路径是str类型。

4-统计文件夹下的文件数量

import os

def count_files_in_folder(folder_path):
    """
    Count the number of files in the given folder.

    Parameters:
    - folder_path (str): Path to the folder.

    Returns:
    - count (int): Number of files in the folder.
    """
    count = 0
    for file_name in os.listdir(folder_path):
        if os.path.isfile(os.path.join(folder_path, file_name)):
            count += 1
    return count

# Example usage:
folder_path = "文件路径"
file_count = count_files_in_folder(folder_path)
print(f"Number of files in the folder: {file_count}")

 

5-删除文件夹B比A多的文件(照片)

import os
def delete_corresponding_files(floderA, floderB):
        files_a = set(os.listdir(floderA))
        files_b = set(os.listdir(floderB))

        files_delete = files_a - files_b
        for file_name in files_delete:
            files_delete_a = os.path.join(floderA,file_name)
            if os.path.isfile(files_delete_a):
                os.remove(files_delete_a)
                print(f"delete:{files_delete_a}")

floderA_path = "F:\\数据集\\Massachusetts\\road_train_label_1108\\road_train_label_1108"
floderB_path = "F:\\数据集\\Massachusetts\\road_train_image1_1108\\road_train_image"
delete_corresponding_files(floderA_path, floderB_path)

 

6-格式转换

from PIL import Image
import os
import re

def extract_number(filename):
    # 从文件名中提取数字部分
    match = re.search(r'\d+', filename)
    return int(match.group()) if match else 0

def convert_tiff_to_png(input_folder, output_folder):
    # 确保输出文件夹存在
    os.makedirs(output_folder, exist_ok=True)

    # 获取输入文件夹中的.tiff或.tif文件列表,并按数字顺序排序
    files = sorted(os.listdir(input_folder), key=extract_number)

    # 遍历排序后的文件列表
    for filename in files:
        if filename.endswith("后缀名A") or filename.endswith("后缀名B"):
            input_path = os.path.join(input_folder, filename)

            # 构建输出文件路径,将扩展名改为.png
            output_filename = os.path.splitext(filename)[0] + ".png"
            output_path = os.path.join(output_folder, output_filename)

            # 打开.tiff或.tif文件,并保存为.png
            img = Image.open(input_path)
            img.save(output_path, format="PNG")
            print(f"Converted {filename} to {output_filename}")

# 输入文件夹路径(包含.tiff或.tif文件)
input_folder = 'F:\\数据集\\Massachusetts\\road_train_label\\road_train_label'

# 输出文件夹路径(保存为.png文件)
output_folder = 'F:\\数据集\\Massachusetts\\road_train_label\\road_train_label_png'

# 执行转换
convert_tiff_to_png(input_folder, output_folder)

 

参考链接: Python创建增量目录_increment_path-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值