gpt4 book ai didi

python - 使用Python解析文本文件

转载 作者:行者123 更新时间:2023-11-30 23:24:11 26 4
gpt4 key购买 nike

我有一个日志文件,我想使用 matplotlib 对其进行解析和绘图。跳过前 6 行后,我得到了感兴趣的数据。例如我的日志文件如下所示:

# 2014-05-09 17:51:50,473 - root - INFO - Epoch = 1, batch = 216, Classif Err = 52.926, lg(p) -1.0350
# 2014-05-09 17:51:53,749 - root - INFO - Test set error = 37.2317

我想绘制每个时期的分类错误与测试集错误的图。

我的第一次尝试:

import numpy
from numpy import *
from pylab import *

f1 = open('log.txt', 'r')
FILE = f1.readlines()
f1.close()

for line in FILE:
line = line.strip()
if ('Epoch' in line):
epoch += line.split('Epoch = ')
elif('Test set error' in line):
test_err += line.split('Test set error = ')

我看到这个错误:

Traceback (most recent call last):
File "logfileparse.py", line 18, in <module>
epoch += line.split('Epoch = ')
NameError: name 'epoch' is not defined

最佳答案

我想您需要将一组纪元和测试集错误放在一起来绘制它们。假设错误行始终位于“epoch”行之后,请尝试以下操作:

data_points = []
ep = 'Epoch = (\d+), batch = \d+, Classif Err = (\d+\.?\d+)'

with open('file.txt') as f:
for line in f:
epoch = re.findall(ep, line)
if epoch:
error_line = next(f) # grab the next line, which is the error line
error_value = error_line[error_line.rfind('=')+1:]
data_points.append(map(float,epoch[0]+(error_value,)))

现在data_points将是一个列表列表,第一个值是纪元,第二个值是classif err值,第三个值是错误值。

正则表达式将返回一个包含元组的列表:

>>> re.findall(ep, i)
[('1', '52.926')]

这里的i是你的第一行

要获取错误代码,请找到最后一个=,然后错误代码就是剩余的字符:

>>> i2 = '# 2014-05-09 17:51:53,749 - root - INFO - Test set error = 37.2317'
>>> i2[i2.rfind('=')+1:]
' 37.2317'

我使用 map(float,epoch[0]+(error_value,)) 将值从字符串转换为 float :

>>> map(float, re.findall(ep, i)[0]+(i2[i2.rfind('=')+1:],))
[1.0, 52.926, 37.2317]

关于python - 使用Python解析文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23580697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com