2013-06-05 41 views
5

Tôi có tệp nhật ký với số dòng tùy ý. Tất cả những gì tôi cần là trích xuất là một dòng dữ liệu từ tệp nhật ký bắt đầu bằng chuỗi "Tổng". Tôi không muốn bất kỳ dòng nào khác từ tệp.tệp nhật ký phân tích cú pháp python

Làm cách nào để viết chương trình python đơn giản cho điều này?

Đây là cách tập tin đầu vào của tôi trông

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 

tôi đang cố gắng để có được một tập tin đầu ra trông giống như

TestName  id  TPS   GRE 
Totals  64  129.61  145.64 

Ok .. Vì vậy, tôi muốn chỉ có 1, 2, 4 và Cột thứ 5 từ tệp đầu vào nhưng không phải cột khác. Tôi đang cố gắng danh sách [index] để đạt được điều này nhưng nhận được một IndexError: (danh sách chỉ mục ra khỏi phạm vi). Ngoài ra không gian giữa 2 cột không giống nhau vì vậy tôi không chắc chắn làm thế nào để phân chia các cột và chọn những cái mà tôi muốn. Ai đó có thể giúp tôi với điều này. dưới đây là chương trình tôi đã sử dụng

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 có vẻ như quá mức cần thiết cho nhiệm vụ này ... sẽ không grep được nhanh hơn? –

Trả lời

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]) 
Các vấn đề liên quan