2017-01-30 2 views
0

Я следующая структура файла журнала. Я хочу узнать максимальное время отклика и хочу распечатать файл журнала, который имеет наивысшее время отклика (R.T), используя python 2.7.11.Манипуляция файлом журнала с использованием python

Структура моего файла журнала:

00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed 4.0(R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00 
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed 6.0(R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00 
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed 5.0(R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00 
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed 8.0(R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00 
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed 2.0(R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00 

Б Код:

file =open(r"logfile.txt","r") 
rts = [] 
for line in file: 
line_array = line.split(" ") 
rts.append(float(line_array[10])) 
max_rt = max(rts) 
print "Max R.T is :", max_rt 

Выход:

2.0 
2.0 
5.0 
8.0 
8.0 

Запрос

Цикл for выполняет все линии и печатает промежуточное время отклика. Наконец, выводится самое высокое время отклика.

Помогите мне!

Для печати только высокое время отклика

Чтобы распечатать весь файл журнала, имеющий наибольшее время отклика.

Как хранить каждую строку в словарях и получить данные, которые нужно, например. (Если указанные данные .the код должен напечатать наибольшее время отклика)

 1  2 3 4     5  6 7 8  9  10   11 
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed 4.0(R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00 
+0

Вы не можете дать вывод, который вы описываете. Вы получите 'ValueError' от попытки конвертировать, например. '4.0 (R.T)' для поплавка. Пожалуйста, предоставьте (с отступом) MCVE - [mcve] – SiHa

ответ

0

Хотя вопросы есть немного запутанный, я думаю, что это поможет. После прочтения журнала вы можете сортировать строки, используя лямбда-функцию, в качестве ключа встроенной функции сортировки. Вам просто нужно указать, где время ответа находится в строке. Я сделал это, разделив строку, ссылаясь на время отклика на его позицию индекса. Комментарии в приведенном ниже коде могут сделать его более понятным.

# open the log file 
with open('logfile.txt', 'r') as f: 
    # read lines into list (one item per line) 
    data = f.readlines() 
# sort the data by response time descending using lambda as key 
sorted_data = sorted(data, 
        # response time is at index 10 in the split line 
        key=lambda row: row.split()[10], 
        reverse=True) 
# print the row with the highest response time 
print(sorted_data[0]) 
+0

Спасибо за информацию. – Naveen

+0

Данные, имеющие значения с плавающей запятой 0.0, печатаются только этим кодом. Значения, содержащие 00.000, пропущены и не печатаются. Помоги мне! – Naveen

0

должно работать:

import re 

with open(r"logfile.txt", "r") as f: 
    lines = f.readlines() 

lines_and_times = [] 

for line in lines: 
    RT = re.findall('(\d+\.\d+)\(R\.T\)', line, re.DOTALL) 
    if RT: 
     lines_and_times.append((float(RT[0]), line)) 

lines_and_times.sort(key=lambda tup: tup[0], reverse=True) 

print 'Max time: {}'.format(lines_and_times[0][0]) 
print 'Full log:' 
print lines_and_times[0][1] 

возвращения:

Max time: 8.0 
Full log: 
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed 8.0(R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00 

Использование регулярных выражений позволяет нам находить время отклика для каждой строки, которую мы храним в виде кортежа наряду с полным линия. Затем мы сортируем список этих кортежей в соответствии с временем отклика (reverse=True дает нам убывающий порядок) и печатаем информацию из первой записи в этом списке.

+0

Спасибо за вашу информацию – Naveen

Смежные вопросы