2017-01-30 4 views
0

私は以下のログファイル構造です。私は最大応答時間を見つけたいと思うし、python 2.7.11を使って応答時間(R.T)が最も高いログファイルを印刷したい。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

関連する問題