我目前正在开始使用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模块中的计数器。我正在想用字典来做这件事。
答案 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))