如何使用python正则表达式从服务器日志文件中提取IP地址?

时间:2018-05-09 13:56:29

标签: python regex python-3.x python-3.6

我目前正在开始使用python。我有一个服务器日志文件,用于我在一段时间内访问过的页面。

如何编写python程序以找出最常访问的IP地址? 我必须使用字典吗? 我已经这样做但我不知道如何使用正则表达式来获取IP地址。

import re

openFile = open('text.txt', "r")

readLines = openFile.read()
# pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
wordfreq = {}

for word in readLines.split():
    if word not in wordfreq:
        wordfreq[word] = 1
    else:
        wordfreq[word] += 1

print(wordfreq)

# wordList = [(v,k) for k,v in wordfreq.items()]
# wordList.sort(reverse=True)
# 
# print(wordList)

PS:我不想使用python模块中的计数器。我正在想用字典来做这件事。

3 个答案:

答案 0 :(得分:2)

使用正则表达式和计数器

<强>演示:

import re
from collections import Counter
s = """www.google.com : 255.111.111.111

-some random stuff-

www.facebook.com : 255.222.222.222

-some random stuff-

www.google.com : 255.111.111.111

-some random stuff-

www.google.com : 255.111.111.111

-some random stuff-
"""

ips = re.findall("www\.[A-za-z]+\.[a-z]+\s+\:\s+(.*$)", s, flags=re.MULTILINE)
print(Counter(ips).most_common(1))

<强>输出:

[('255.111.111.111', 3)]

答案 1 :(得分:1)

除了Rakesh之前发布的内容之外,另一种提取IP地址的方法是:

import re

pattern = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
finalIP = re.findall(pattern, s)

对于柜台,请参阅他的答案。我刚发布了一个不同的正则表达式!

答案 2 :(得分:0)

找出访问最多的IP地址,并以升序显示。您可以将第一个IP设为访问量最大的IP。

import re
import operator

openFile = open("text.txt", "r").readlines()

wordfreq = {}

for line in openFile:
    ipAddr = line.split(" ")[0]
    if ipAddr not in wordfreq:
        wordfreq[ipAddr] = 0

    wordfreq[ipAddr] += 1

#print(wordfreq)

# sorting the dict
sorted_ips = dict(
    sorted(wordfreq.items(), key=operator.itemgetter(1), reverse=True))


for ipAddr, count in sorted_ips.items():
    print("{} : {}".format(ipAddr, count))