Python求取最多的IP訪問次數
第一步,模擬生成ip地址
def generateRandom(rangeFrom, rangeTo): import random return random.randint(rangeFrom,rangeTo) def generageMassiveIPAddr(fileLocation,numberOfLines): IP = [] file_handler = open(fileLocation, 'a+') for i in range(numberOfLines): IP.append('10.197.' + str(generateRandom(0,255))+'.'+ str(generateRandom(0,255)) + '\n') file_handler.writelines(IP) file_handler.close() if __name__ == '__main__': from time import ctime print ctime() for i in range(10): print ' ' + str(i) + ": " + ctime() generageMassiveIPAddr('/opt/work/iplogProcess/logs', 10000) print ctime()
第二步,對日誌進行切片
import os def mkFile(file_path): if(os.path.exists(file_path)): return 1 else: os.mknod(file_path) return 1 return 0 def splitFile(inputFile, splitNumbers): print "begin to split files........" file_handler = open(inputFile, 'r+') for IP in file_handler: IPtest = IP.strip("\n") hashvalue = hash(IPtest) %splitNumbers file_path = "/opt/work/iplogProcess" + "/logs_" + str(hashvalue) if mkFile(file_path): filePoint = open(file_path, "a+") filePoint.writelines(IP) filePoint.close() file_handler.close()
第三步,進行統計
from time import ctime import os import re def ipProcess(dirPath): i = 0 maxvalue = 0 Result = {} resultdir = {} for root, dirs,files in os.walk(dirPath): print "get file" print "begin to statcstic............." #using re to match files for item in next(os.walk('/opt/work/iplogProcess'))[2]: match = re.search(r'logs_\d+',item) if match is None: continue #path = dirPath + "/" + files[i] #maxvalue = 0 dire = {} # open a new file to statistic path = dirPath + "/" + item filePoint = open(path, 'r') #print file names #print filePoint for cloums in filePoint: #print cloums if cloums in dire: dire[cloums] = dire[cloums] + 1 else: dire[cloums] = 1 #print cloums,dire[cloums] #sort the dictionary dire dire = sorted(dire.items(), key=lambda d: d[1], reverse=True) #for every file, find top 10 i = 0 for k in dire: if i < 10: Result[dire[i][0]] = dire[i][1] #print dire[i][0] else: break i = i+1 print '--------------------------to read next file----------------------------------------' Result = sorted(Result.items(), key=lambda d: d[1], reverse=True) i = 0 for keys in Result: if i < 10: print keys else: break i = i+1 if __name__ == '__main__': ipProcess("/opt/work/iplogProcess/")
或者全部讀入記憶體進行統計
import os
from time import ctime
def findIPAtOnce(targetFile):
print "Started At: " + ctime()
Result = {}
file_handler = open(targetFile, 'r')
for line in file_handler:
if line in Result:
Result[line] = Result[line] + 1
else:
Result[line] = 1
print "Write to Dic Finished At: " + ctime()
file_handler.close()
Result = sorted(Result.items(), key=lambda d: d[1])
print "Sorting Finished At: " + ctime()
print 'Result:'
for i in range(10):
print ' ' + str(Result.pop())
if __name__ == '__main__':
findIPAtOnce("/opt/work/iplogProcess/logs")
相關推薦
Python求取最多的IP訪問次數
第一步,模擬生成ip地址 def generateRandom(rangeFrom, rangeTo): import random return random.randint(rangeFrom,rangeTo) def generageMassiveI
python統計apache、nginx訪問日誌IP訪問次數並且排序(顯示前20條)
als apache orm item lambda roo oot ipaddr str 前言:python統計apache、nginx訪問日誌IP訪問次數並且排序(顯示前20條)。其實用awk+sort等命令可以實現,用awk數組也可以實現,這裏只是用python嘗試下
求出現最多的字串和次數,如有多個全部輸出
注:方法有多個這裡只是其中一中。 1.解題思路 (1)引入TreeSet,通過集合找出所有出現的字串 (2)引入ArrayList:快速排序,在通過StringBuffer生成排序後的字串 (3)通過String API中的indexOf()找出第一次出現的下標,lastI
python: 抓取免費代理ip
python 抓取免費代理ip通過抓取西刺網免費代理ip實現代理爬蟲: from bs4 import BeautifulSoup import requests import random import telnetlib requests = requests.session() ip_list = []
監聽器和過濾器寫的分類統計IP訪問次數
ServletContextListenerTest 類 設定監聽器監聽 package com.zhiyou.ipadr.demo; import java.util.HashMap; import java.util.Map; import
陣列矩陣中求取 最大的sum
題目: 有一個包含正數和負數的二維陣列。一個子矩陣是指在該二維數組裡,任意相鄰的下標是1×1或更大的子陣列。一個子矩陣的和是指該子矩陣中所有元素的和。 本題中,把具有最大和的子矩陣稱為最大子矩陣。例如,如下陣列的最大子矩陣位於左下角,其和為15。 輸入 是N×N
IIS日誌——統計IP訪問次數的一種方法
cto images 服務器 href parse ddc 結果 mark 使用 使用LogParser對IIS服務器被Hit訪問的IP進行次數統計,方便結合防火墻IP***列表對IIS網站進行日誌審計報表的編寫 配置IIS網站的日誌 下載進行日誌分析的兩個工具Lo
Eigen庫求取最大特徵值和特徵向量
原文連結:http://blog.csdn.net/wcsgzc/article/details/53946345 Eigen庫中有求取矩陣特徵值和特徵向量的函式EigenSolver,用起來很方便。 但是官網說明文件裡,求取特徵向量後僅僅是輸出來表示,如何使
Python 抓取可用代理IP
問題描述在做資料抓取的時候,經常會碰到有些網站對同一IP的訪問頻率做限制。遇到這種情況一般只有兩種解決方案:降低抓取頻率。這種方法在資料變化不頻繁,資料量不大的情況下還好,但是,如果資料變化頻繁或者資料量龐大,此方法明顯不能滿足需求。使用代理IP。抓取的過程中,經常更換代理I
使用Python求取前100組勾股數
本來想採用窮舉試探的方式來做這個演算法,後來發現還是有點麻煩。從網路上找來了一種求解方法如下: 當a為大於1的奇數2n+1時,b=2n^2+2n,c=2n^2+2n+1。實際上就是把a的平方數拆成兩個連續自然數。 編寫程式碼如下: #!/
【Leetcode】Python實現盛最多水的容器
給定 n 個非負整數 a1,a2,…,an,每個數代表座標中的一個點 (i, ai) 。畫 n 條垂直線,使得垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。 注意:你不能傾斜
Selenium學習四——利用Python爬取網頁多個頁面的表格資料並存到已有的excel中
利用Python爬取網頁多個頁面的表格資料並存到已有的excel中 1、具體要求 獲取牛客網->題庫->線上程式設計->劍指Offer網頁,獲取表格中的全部題目,儲存到本地excel中 2、技術要求 利用Selenium+Python獲取網頁,操
python爬取免費優質IP歸屬地查詢接口
block 而且 加密 range port 秒級 請求 分割 點擊 python爬取免費優質IP歸屬地查詢接口 具體不表,我今天要做的工作就是: 需要將數據庫中大量ip查詢出起歸屬地 剛開始感覺好簡單啊,畢竟只需要從百度找個免費接口然後來個python腳本跑一晚上就o
使用python找出nginx訪問日誌中訪問次數最多的10個ip排序生成網頁
#encoding=utf-8 # 找到日誌中的top 10,日誌格式如下 #txt = '''100.116.167.9 - - [22/Oct/2017:03:55:53 +0800] "HEAD /check HTTP/1.0" 200 0 "-" "-" "-" ut = 0.001''' #n
SHELL 分析 列出當天訪問次數最多的IP
SHELL 分析日誌作者:lvtao釋出於:2013-7-3 14:58 Wednesday 分類:工具原始碼 列出當天訪問次數最多的IP 命令:cut -d- -f 1 /usr/local/apache2/logs/access_log |uniq -c | sort
從1億個ip中找出訪問次數最多的IP
問題一:怎麼在海量資料中找出重複次數最多的一個演算法思想:方案1:先做hash,然後求模對映為小檔案,求出每個小檔案中重複次數最多的一個,並記錄重複次數。 然後找出上一步求出的資料中重複次數最多的一個就是所求(如下)。問題二: 網站日誌中記錄了使用
1、(topK問題)海量日誌資料,提取出某日訪問百度次數最多的10個IP。
#include <iostream>#include <fstream>#include <string.h>#include <ctime>#include <hash_map>#include <sys/socket.h>#incl
求一個數組中重複元素出現最多值,最大的元素及出現次數,次數相同時,取最大值,優先考慮次數
#include <iostream> #include <string> #include <map> using namespace std; void maxNumTimes(int a[], int len, int b[])
BAT面試上機題從3億個ip中找出訪問次數最多的IP詳解
我們面臨的問題有以下兩點:1)資料量太大,無法在短時間內解決;2)記憶體不夠,沒辦法裝下那麼多的資料。而對應的辦法其實也就是分成1)針對時間,合適的演算法+合適的資料結構來提高處理效率;2)針對空間,就是分而治之,將大資料量拆分成多個比較小的資料片,然後對其各個資料片進行處理,最後再處理各個資料片的結果。原文
模擬實現atoi和itoa以及100G 的IP地址求出現次數最多的前K個IP
1.模擬實現C庫的atoi和itoa。 2.給一個超過100G的log file, log中存著IP地址, 設計演算法找到出現次數最多的100個IP地址? 1.題考察面試者的思維方式:完整性和魯棒性 先想好測試用例,溝通好錯誤處理,才能滿意