1#監控伺服器日誌,找出每分鐘訪問超過100次的ip位址。23
#1、每分鐘讀取一次檔案,獲取檔案內容4#
2、從檔案內容裡面找到ip位址5#
3、判斷每個ip出現的次數,如果超過100次,就找出來
6import
time
7 point=0
8while
true:
9 ips={} #
定義字典,用於存放ip和次數
10 f=open("
access.log
",encoding="
utf-8")
11 f.seek(point) #
指標移動到上次統計的位置
12for i in f: #
通過for來逐行讀取檔案的內容
13if i.strip()!='': #
判斷是否是空行
14 ip=i.split()[0]
15if ip not
inips.keys():
16 ips.setdefault(ip,1)
17else
:18 ips[ip]+=1
19 point=f.tell() #
獲取當前檔案讀的位置
20for k,v in ips.items(): #
遍歷字典中所有的ip,並輸出次數大於100次的ip
21if v>100:
22print("
%s超過100次
"%k)
23 f.close() #
關閉檔案
24 time.sleep(60)
備註:1、為什麼用字典不用list存放ip進行統計
答:如果用list每個ip存入陣列,當ip較多,陣列就會特別大,佔內容,且遍歷性能較弱,用字典每個ip 對應乙個次數,節省記憶體,遍歷性能較高
2、除了監控日誌,還可以通過該段**進行做其他的統計工作,比如乙個檔案中某個人物出現次數等
3、檔案讀取用for i in f 的方式,這樣每次讀取一行,佔記憶體較小,如果用readlines,是每次把檔案所有內容取出,這樣較佔記憶體
1 dic= #人物初始值
2 with open("
sanguo.txt
",encoding="
utf-8
") as f: #
with這種方式不需關閉檔案
3for i in f: #
逐行遍歷檔案
4for k in dic.keys(): #
遍歷字典人物
5 num=i.count(k) #
統計當前行人物個數
6 dic[k]+=num #
更新人物個數值
7print(dic) #
輸出字典
Python統計日誌中每個IP出現次數
介紹了python統計日誌中每個ip出現次數的方法,例項分析了python基於正規表示式解析日誌檔案的相關技巧,需要的朋友可以參考下 本指令碼可用於多種日誌型別 coding utf 8 import re,time defmail log file path global count log op...
Linux中awk統計ip訪問次數
現在有乙個檔案,資料量大概在200多萬條記錄,想用shell的awk做統計,檔案的格式如下 關鍵字 url ip位址 test 123 1 test 123 1 test 123 2 test2 12 1 test2 123 1 test2 123 2 現在想要統計的結果是 檢視同乙個關鍵字和url...
Nginx 日誌檔案 訪問IP統計
nginx訪問日誌檔案內容如下 python requests 2.4.3 cpython 2.7.9 linux 3.16.0 4 amd64 如何通過命令列統計和排列訪問日誌裡的ip數 linux sort,uniq,cut,wc命令詳解 python 1表示以空格為分割符的第乙個匹配項,也就是...