2013-06-05 18 views
5

Ho un file di registro con un numero arbitrario di righe. Tutto ciò di cui ho bisogno è estrarre una riga di dati dal file di log che inizia con una stringa "Total". Non voglio altre righe dal file.file di registro parsing python

Come posso scrivere un semplice programma Python per questo?

Ecco come il mio file di input sembra

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 

Sto cercando di ottenere un file di output che assomiglia

TestName  id  TPS   GRE 
Totals  64  129.61  145.64 

Ok .. così ho voluto solo il 1 °, 2 °, 4 ° e 5a colonna dal file di input ma non da altri. Sto cercando la lista [indice] per ottenere questo risultato, ma ho ottenuto un errore Index: (indice della lista fuori intervallo). Anche lo spazio tra 2 colonne non è lo stesso, quindi non sono sicuro di come suddividere le colonne e selezionare quelle che voglio. Qualcuno può aiutarmi per favore con questo. Di seguito è riportato il programma che ho usato

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 sembra eccessivo per questo compito ... non sarebbe grep essere più veloce? –

risposta

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])