- 要提取的log格式如下:
- 代码如下:
python
import re
import matplotlib.pyplot as plt
import numpy as np
import argparse
from os import path
from re import search
class DataExtractor(object):
''' DataExtrator class '''
def __init__(self, infile, keyword, outfile):
'''
构造函数
infile:输入文件名
keyword:目标数据前面的关键字
outfile:输出文件名
'''
self.infile = infile
self.keyword = keyword
self.outfile = outfile
def 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 data
except IOError:
print(
"Open file [%s] or [%s] failed!" % (self.infile, self.outfile))
return False
if __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()
- 得到结果
参考: