如何在python中提取大型日志文件的行

如何在python中提取大型日志文件的行,python,Python,我有一个很大的日志文件,其中包含的信息,我唯一感兴趣的信息如下 ..... ..... ..... I0813 11:58:19.631247 30700 solver.cpp:189] Iteration 500, loss = 0.0922444 I0813 11:58:19.631288 30700 solver.cpp:470] Iteration 500, lr = 0.001 ..... ..... ..... I0813 12:05:11.543995 30700 solver.c

我有一个很大的日志文件,其中包含的信息,我唯一感兴趣的信息如下

.....
.....
.....
I0813 11:58:19.631247 30700 solver.cpp:189] Iteration 500, loss = 0.0922444
I0813 11:58:19.631288 30700 solver.cpp:470] Iteration 500, lr = 0.001
.....
.....
.....
I0813 12:05:11.543995 30700 solver.cpp:189] Iteration 520, loss = 0.0299977
I0813 12:05:11.544034 30700 solver.cpp:470] Iteration 520, lr = 0.001
.....
.....
.....
I0813 12:10:11.543995 30700 solver.cpp:189] Iteration 420, loss = 0.0299977
I0813 12:10:11.544034 30700 solver.cpp:470] Iteration 540, lr = 0.001
如何在python中提取这些行并提取关键数据,如迭代、lr、丢失和时间戳,然后保存到另一个文件中


注意,可分辨数据如下 解算器.cpp:189次迭代或解算器.cpp:470次迭代

logfile = r'C:\logfile.txt'
y = open(r'C:\extract.txt', 'a')
with open(logfile, 'r') as read:
  for line in read:
    if "solver.cpp:189" in line:
        loss = line.split(',')[1]
        y.write(loss)
    if "solver.cpp:470" in line:
        lr = line.split(',')[1]
        y.write(lr)

同样地,你也可以在“=”上进行拆分,以获得准确的数字。或者,如果你想更具体一些,你可以在“lr=”或“loss=”上进行拆分。这实际上取决于您打算如何应用它,以及日志的其余部分是什么样子。

您感兴趣的行与其他行的区别是什么?您确定需要Python吗?如果您在Linux/Unix上工作,您可能可以结合使用
grep
cut
。可分辨数据类似于solver.cpp,如果solver.cpp:189,则可能会在行尾丢失。如果是solver.cpp.470,则可以获取行末尾的lr。我之所以使用python,是因为我想在获得这些关键信息后绘制一个图形