用Python排序apache日志

2024-09-28 03:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有一个简单的apache日志:

192.168.1.1 GET /index.php
192.168.1.1 GET /pilt.png
192.168.1.1 GET /index.php
192.168.1.5 GET /index.php
192.168.1.5 GET /pilt.png
192.168.1.7 GET /index.php
192.168.1.7 GET /index.php
192.168.1.7 GET /index.php
192.168.1.7 GET /kaust/index.php
192.168.1.7 GET /index.php

我该如何编写一个Python代码来整理所有相似的IP地址,并计算出有多少IP地址

w = open("C:\\Users\\xxx\\Desktop\\test.txt","r")

for i in w:
  log=i.split(' ')
  print log[0]
w.close()

已经尝试了这么多,但无法进一步编写代码。你知道吗

谢谢你!你知道吗


Tags: 代码testloggetindexpngapacheopen
2条回答

您可以将defaultdict(int)用于您的目的:

from collections import defaultdict
my_dict = defaultdict(int)
w = open("C:\\Users\\xxx\\Desktop\\test.txt", "r")
for line in w:
    ip = line.split(' ')[0]
    my_dict[ip]+=1

my_dict  # defaultdict(<class 'int'>, {'192.168.1.7': 5, '192.168.1.1': 3, '192.168.1.5': 2})

具体操作如下:

x = open('PATH_TO_FILE').read()

from itertools import groupby
from operator import itemgetter
x = x.split('\n')
for i in range(len(x)):
    x[i] = x[i].split(' ')

j = 0

for elt, items in groupby(x, itemgetter(0)):
    j += 1
    k = 0
    print elt, items
    for i in items:
        k += 1
        print i
    print 'Total count for IP ',i[0],' is :',k

print 'Total unique IP address are : ',j

相关问题 更多 >

    热门问题