關於日誌文件的一些處理

1、 一個日誌文件,行的信息中包括調用的接口名,如何找出日誌文件中訪問量在前10位的接口。api

apis = []                  # 定義空列表用於存放從日誌行中取出的接口名
with open('Log.txt') as fr:        # 以行讀取日誌文件,並在行中截取出接口名存放至apis列表中
for line in fr:
api = line.split(' ')[4]
apis.append(api)
api_set = list(set(apis))         # 爲了在統計每一個接口名個數時減小循環次數,把接口名列表作了去重處理
d = {}                    # 定義空字典用於存放相似「接口名:5」這樣的鍵值對
for api in api_set:             # 給每一個接口名統計次數併成對存放在字典d裏
d[api] = apis.count(api)
sorted_api = sorted(d.items(),key = lambda item : item[1],reverse = True )  # 用sorted方法對字典以value值倒敘排序
print(sorted_api[:10])           # 打印出倒序序列中的前十項

重點介紹 sorted 方法。
sorted方法可用來對字典按key值或value值排序的。sorted(iterable,key,reverse),sorted一共有iterable,key,reverse這三個參數,其中iterable表示能夠迭代的對象,例如能夠是dict.items()、dict.keys()等,key是一個函數,用來選取參與比較的元素,reverse則是用來指定排序是倒序仍是順序,reverse=true則是倒序,reverse=false時則是順序,默認時reverse=false

1.sorted方法按key值對字典排序
mylist =[A,B,A,C,C,A,D,B,A,C,C,E,F,G,A]
set_list = list(set(mylist))
d = {}
for k in set_list:
d[k] = mylist.count(k)
sorted_list = sorted(d.keys())
print(sorted_list)

結果是:[A, B, C, D, E, F, G]
能夠看出,sorted(d.keys())返回了key爲元素的列表,value不見了,若想倒序 sorted(d.kyes(),reverse=True)

2.sorted方法按value值對字典排序
 要對字典的value排序則須要用到key參數並對其使用lambda表達式的方法。
mylist = [A,B,A,C,C,A,D,B,A,C,C,E,F,G,A]
set_list = list(set(mylist))
d = {}
for k in set_list:
d[k] = mylist.count(k)
sorted_list = sorted(d.items(), key=lambda item:item[1], reverse=True)
print(sorted_list)

結果是: [(A, 5), (C, 4), (B, 2), (D, 1), (E, 1), (F, 1), (G, 1)]
能夠看出結果是以字典的每個「鍵值對」爲元素的列表,字典裏原來的信息沒有丟掉。

這裏的d.items()其實是將字典d轉換爲可迭代對象,迭代對象的元素爲原字典的一個鍵值對元組,如(A,5),items()方法將字典的元素轉化爲了元組。
而這裏key參數也就是sorted方法的第二個參數對應的lambda表達式lambda item:item[1],意思則是選取元組中的第二個元素(即 (A,5)中的5)做爲比較參數(若是寫做key=lambda item:item[0]的話則是選取第一個元素(即(1,5)中的1)做爲比較對象,也就是key值做爲比較對象。
lambda x:y中x表示輸出參數,y表示lambda函數的返回值
因此採用這種方法能夠對字典的value進行排序。注意排序後的返回值是一個list,而原字典中的名值對被轉換爲了list中的元組。

2、監控日誌文件中可疑的ip地址 (如每分鐘訪問量超過200次的IP要處理掉)

思路和用到的技術點:
以一分鐘爲單位時間段,      time 模塊
先讀日誌文件,          讀文件
在每行中截取出IP字段統一存放,  字符串拆分 list追加
統計每一個IP的數量與200比較    列表去重優化,for 循環, count()方法

相關文章
相關標籤/搜索