从 python 中的日志文件中读取数据

Reading in data from a log file in python

我试图解析具有重复模式的日志条目,并使用 python 将每个条目写入其自己的文件中。所有日志条目都具有通用格式:

ProcessID= abc
.
.
.
.
.
Size=76 bytes
EOE
------------------------------------------------------------------------

StartTime=abc
.
.
.
.
.
Size=76 bytes
EOE
------------------------------------------------------------------------

DifferentParameter=abc
.
.
.
.
.
Size=76 bytes
EOE
------------------------------------------------------------------------

每个条目都有不同数量的参数。基本上我需要做的是只解析两个参数并将它们映射在一起,但并不是每个条目都有两个参数所以我的第一个目标是将条目拆分成单独的文件(或者如果有人知道更好的拆分方法条目)然后我将使用正则表达式或类似的东西进一步处理每个条目。

到目前为止,我已经获得了以下代码来尝试解析 10 个日志条目,但我不完全确定如何处理它找到 EOE 条目然后移至下一行的情况。

rf = open('data.txt', 'r')
lines = rf.readLine()
rf.close()

i = 0

while i != 10:

for line in lines:
    while(line.find('EOE') == -1):
        with open('data'+(i)+'.txt', 'w') as wf:
            wf.write(line)

    file.seek(1,1)    
    i+=1

rf.close()  

在我看来,即使是日志文件也存在一些问题。 您尝试按 EOE 拆分,但这样做您将获得开头有“-----”行的文件和其他没有的文件(特别是 "processID" 部分将没有“ ----”开头)。 所以,为什么不按“----”来拆分呢? 第二个问题,空行。此外,在这种情况下,您将有一些文件以空行开头,而另一些则没有。需要考虑到这一点。

我尝试解决所有这些问题并获得格式相同、没有空行且以包含“=”的行开头的文件。

我调用了输入文件"log_stack.txt"。

这是我拙劣的解决方案:

with open("log_stack.txt") as f:
    read_data = f.readlines()

s=""
counter=1

f=open("file_{}.txt".format(counter), "w")
for i in read_data:

  if(i.find("---") == -1):
    if(i!="\n"):
      s+=i
  else:
    f.write(s)
    s=""
    f.close()
    counter+=1
    f=open("file_{}.txt".format(counter), "w")
f.close()