2013-06-05 18 views
5

Mam plik dziennika z dowolną liczbą linii. Wszystko, czego potrzebuję, to wyodrębnić jedną linię danych z pliku dziennika, która zaczyna się ciągiem "Total". Nie chcę żadnych innych linii z pliku.plik dziennika parsujący python

Jak napisać prosty program python do tego?

To jest jak mój plik wejściowy wygląda

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 

Próbuję uzyskać plik wyjściowy, który wygląda jak

TestName  id  TPS   GRE 
Totals  64  129.61  145.64 

Ok .. Więc chciałem tylko 1, 2, 4 i 5. kolumna z pliku wejściowego, ale nie inne. Próbuję listę [indeks], aby osiągnąć to, ale uzyskanie IndexError: (indeks listy poza zakresem). Również przestrzeń między 2 kolumnami nie jest taka sama, więc nie jestem pewien, jak podzielić kolumny i wybrać te, które chcę. Czy ktoś może mi w tym pomóc. Poniżej jest program użyłem

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] 
+2

Python wydaje się overkill dla tego zadania ... nie grep być szybciej? –

Odpowiedz

3
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 
1
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]) 
Powiązane problemy