1. 程式人生 > >Python求取最多的IP訪問次數

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")


相關推薦

PythonIP訪問次數

第一步,模擬生成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.題考察面試者的思維方式:完整性和魯棒性 先想好測試用例,溝通好錯誤處理,才能滿意