日志文件解析python

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16946051/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 00:03:32  来源:igfitidea点击:

log file parsing python

pythonparsing

提问by Surianan

I have a log file with arbitrary number of lines. All I need is to extract is one line of data from the log file which starts with a string “Total”. I do not want any other lines from the file.

我有一个任意行数的日志文件。我所需要的只是从日志文件中提取一行以字符串“Total”开头的数据。我不想要文件中的任何其他行。

How do I write a simple python program for this?

我如何为此编写一个简单的python程序?

This is how my input file looks

这是我的输入文件的样子

TestName     id         eno            TPS      GRE          FNP
Test 1205    1            0            78.00        0.00         0.02
Test 1206    1            0            45.00        0.00         0.02
Test 1207    1            0            73400        0.00         0.02
Test 1208    1            0            34.00        0.00         0.02

Totals       64           0            129.61       145.64       1.12

I am trying to get an output file which looks like

我正在尝试获取一个看起来像的输出文件

TestName     id      TPS         GRE
Totals       64      129.61      145.64

Ok.. So I wanted only the 1st, 2nd, 4th and 5th column from the input file but not others. I am trying the list[index] to achieve this but getting a IndexError: (list index out of range ). Also the space between 2 columns are not the same so i am not sure how to split the columns and select the ones that i want. Can somebody please help me with this. below is the program I used

好的.. 所以我只想要输入文件中的第 1、2、4 和 5 列,而不是其他列。我正在尝试使用 list[index] 来实现这一点,但得到一个 IndexError: (list index out of range )。此外,两列之间的空间也不相同,所以我不确定如何拆分列并选择我想要的列。有人可以帮我解决这个问题吗?下面是我使用的程序

newFile = open('sana.log','r')

for line in newFile.readlines():

    if ('TestName' in line) or ('Totals' in line):

        data = line.split('\t')

        print data[0]+data[1]

采纳答案by TehTris

theFile = open('thefile.txt','r')
FILE = theFile.readlines()
theFile.close()
printList = []
for line in FILE:
    if ('TestName' in line) or ('Totals' in line):
         # here you may want to do some splitting/concatenation/formatting to your string
         printList.append(line)

for item in printList:
    print item    # or write it to another file... or whatever

回答by cmd

for line in open('filename.txt', 'r'):
    if line.startswith('TestName') or line.startswith('Totals'):
        fields = line.rsplit(None, 5)
        print '\t'.join(fields[:2] + fields[3:4])