- 要提取的log格式如下:
- 代码如下:
import reimport matplotlib.pyplot as plt
import numpy as npimport argparse
from os import path
from re import searchclass DataExtractor(object):''' DataExtrator class '''def __init__(self, infile, keyword, outfile):'''构造函数infile:输入文件名keyword:目标数据前面的关键字outfile:输出文件名'''self.infile = infileself.keyword = keywordself.outfile = outfiledef data_after_keyword(self):''' Extract data from infile after the keyword. '''try:data = []patt = '%s:\s*(\d+\.?\d+)' % self.keyword # 使用正则表达式搜索数据,关键字冒号,有空格或者没有空格, 小数点前后的数字with open(self.infile, 'r') as fi:with open(self.outfile, 'w') as fo:for eachLine in fi:s = search(patt, eachLine)if s is not None:fo.write(s.group(1) + '\n')data.append(float(s.group(1)))return dataexcept IOError:print("Open file [%s] or [%s] failed!" % (self.infile, self.outfile))return Falseif __name__ == "__main__":names = ['train loss', 'train psnr', 'iter_time', 'data_time', 'epoch time']file = r'D:\512_bs4_20230922_182434.log'fileout = file[:-4] + '_out.log'dd = dict()for name in names:extractor = DataExtractor(file, name, fileout)dd[name] = extractor.data_after_keyword()print(dd)x = range(len(dd[names[0]]))plt.figure()plt.subplot(131)plt.plot(x, dd[names[0]], 'r')plt.subplot(132)plt.plot(x, dd[names[1]], 'r')plt.subplot(133)plt.plot(x, dd[names[2]], 'g', x, dd[names[3]], 'b')plt.show()
- 得到结果
参考:
https://blog.csdn.net/guo_qingxia/article/details/113979135
https://blog.csdn.net/letian3658/article/details/105882965