python re入门——从训练记录log文件获得关键信息(附完整代码)

问题描述

我们在使用深度学习训练模型和做其他一些处理的时候,往往需要记录log文件,保存配置信息和一部分结果。本文基于re实现从不同的log文件中,获取不同样本的PSNR,并求出PSNR的平均值。
log文件的内容如下图所示,我们需要获取不同的样本序号(例如25591)和对应的PSNR值


                            < M A T L A B (R) >
                  Copyright 1984-2017 The MathWorks, Inc.
                   R2017a (9.2.0.538062) 64-bit (glnxa64)
                             February 23, 2017

 
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
 
./test/RCAN/Recon_SGD_100mid30/Reconx2_LR_25589.mat
/home/usrname/project/ReconNet/dataset_GT3D/Xguess_direct/Xguess_25589.mat
single
single
最大值最小值
  2.0833e+04

     0

  1.3346e+04

     0

差值的绝对值的和
    90656192

PSNR is 40.5706
25589 get psnr over

                            < M A T L A B (R) >
                  Copyright 1984-2017 The MathWorks, Inc.
                   R2017a (9.2.0.538062) 64-bit (glnxa64)
                             February 23, 2017

 
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
 
./test/RCAN/Recon_SGD_100mid30/Reconx2_LR_25590.mat
/home/usrname/project/ReconNet/dataset_GT3D/Xguess_direct/Xguess_25590.mat
single
single
最大值最小值
  1.5590e+04

     0

  9.8991e+03

     0

差值的绝对值的和
    66605736

PSNR is 38.3033
25590 get psnr over

                            < M A T L A B (R) >
                  Copyright 1984-2017 The MathWorks, Inc.
                   R2017a (9.2.0.538062) 64-bit (glnxa64)
                             February 23, 2017

 
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
 
./test/RCAN/Recon_SGD_100mid30/Reconx2_LR_25591.mat
/home/usrname/project/ReconNet/dataset_GT3D/Xguess_direct/Xguess_25591.mat
single
single
最大值最小值
  1.4285e+04

     0

  9.4557e+03

     0

差值的绝对值的和
    71322160

PSNR is 37.5057
25591 get psnr over

                            < M A T L A B (R) >
                  Copyright 1984-2017 The MathWorks, Inc.
                   R2017a (9.2.0.538062) 64-bit (glnxa64)
                             February 23, 2017

 
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
 
./test/RCAN/Recon_SGD_100mid30/Reconx2_LR_25592.mat
/home/usrname/project/ReconNet/dataset_GT3D/Xguess_direct/Xguess_25592.mat
single
single
最大值最小值
  1.8736e+04

     0

  1.5317e+04

     0

差值的绝对值的和
   167848192

PSNR is 33.433
25592 get psnr over

                            < M A T L A B (R) >
                  Copyright 1984-2017 The MathWorks, Inc.
                   R2017a (9.2.0.538062) 64-bit (glnxa64)
                             February 23, 2017

 
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
 
./test/RCAN/Recon_SGD_100mid30/Reconx2_LR_25593.mat
/home/usrname/project/ReconNet/dataset_GT3D/Xguess_direct/Xguess_25593.mat
single
single
最大值最小值
  1.8384e+04

     0

  1.4160e+04

     0

差值的绝对值的和
   159005152

PSNR is 33.9701
25593 get psnr over

                            < M A T L A B (R) >
                  Copyright 1984-2017 The MathWorks, Inc.
                   R2017a (9.2.0.538062) 64-bit (glnxa64)
                             February 23, 2017

 
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
 
./test/RCAN/Recon_SGD_100mid30/Reconx2_LR_25594.mat
/home/usrname/project/ReconNet/dataset_GT3D/Xguess_direct/Xguess_25594.mat
single
single
最大值最小值
  2.2593e+04

     0

  1.5102e+04

     0

差值的绝对值的和
   260633296

PSNR is 32.6955
25594 get psnr over
问题解决

我们使用按行读取log文本的内容,并去除’\n’

with open(logName, 'r') as f1:
    list1 = f1.readlines()

for i in range(0, len(list1)):
    list1[i] = list1[i].rstrip('\n')

然后使用findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

import re 

分别获取以下语句:
PSNR is 38.2274
25592 get psnr

a = re.findall('^PSNR is [0-9.?0-9]*',list1[i])
b = re.findall('^[0-9]* get psnr',list1[i])

其中表示出现0或1次,*表示出现0-无穷次。结果a和b都是列表,当它不为空说明提取到了上面的语句。
然后在a[0]和b[0]中提取数字,也就是找到38.2274和25592:

        if len(a): 
            # print(a)
            val = re.findall('[0-9.?0-9]+',a[0])
 	    if len(b):
            # print(b)
            key = re.findall('^[0-9]+',b[0])

+表示出现1到无穷次。我们可以将样本序号作为键,对应的PSNR作为值保存在字典中。

完整代码

import re
'''
@Author: AsajuHuishi
@Date: 20/11/1
'''

def getResult(logName, dictName):
    with open(logName, 'r') as f1:
        list1 = f1.readlines()

    for i in range(0, len(list1)):
        list1[i] = list1[i].rstrip('\n')
        # print(list1[i])
        a = re.findall('^PSNR is [0-9.?0-9]*',list1[i])
        if len(a): 
            # print(a)
            val = re.findall('[0-9.?0-9]+',a[0])
            # print('PSNR: ',val[0])
            
        b = re.findall('^[0-9]* get psnr',list1[i])
        if len(b):
            # print(b)
            key = re.findall('^[0-9]+',b[0])
            # print('mat: ',key[0])
            dictName[key[0]] = val[0]
            
    print('psnr字典', dictName, '内含测试样本数量', len(dictName))
    print('平均值',(sum([float(i) for i in list(dictName.values())])/float(len(dictName))))
    return dictName

def main():
    psnr3d = dict()
    psnr4d = dict()
    print('3d')
    ret3D = getResult('pp3D_20.log',psnr3d)
    print('4d')
    ret4D = getResult('pp4D_20.log',psnr4d)
    
if __name__ == "__main__":
    main()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《人工智能实践教程——从Python入门到机器学习》是一本非常有价值的电子书。该书从Python编程语言入门开始,逐步引导读者了解人工智能的相关概念和知识,并介绍了如何使用Python进行人工智能的实践。 在这本电子书中,作者通过简明的语言和实例来解释Python的基本语法和常用库,帮助读者快速上手Python编程。然后,逐步介绍了人工智能的基础知识,如神经网络、深度学习和机器学习等。读者可以通过书中的实践项目,学习如何使用Python进行数据处理、特征提取、模型训练和结果评估等。 特别值得一提的是,该书在讲解算法和模型原理的同时,也加入了大量的实践示例和代码。读者可以通过实践项目,亲自动手实现和调试,加深对人工智能算法和技术的理解和掌握。 这本电子书的优点在于: 1. 清晰明了的语言和实例,易于理解和掌握。 2. 结合理论和实践,帮助读者建立起算法和模型的直观认知。 3. 丰富的实践项目和代码示例,帮助读者真正学会如何运用Python进行人工智能实践。 4. 概念讲解详尽,适合初学者学习,也可作为已有基础的读者进行实践项目的参考。 总之,这本电子书是一本很实用的教程,对于想要学习人工智能并具备一定Python编程基础的读者来说,是一本值得推荐的指导书。读者可以通过该书学习到从Python入门到机器学习的全过程,并获得实际应用的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值