首页 > 解决方案 > 如何使用 python 正则表达式从服务器日志文件中提取 IP 地址?

问题描述

我目前正在开始使用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 模块中的计数器。我想用字典来做到这一点。

标签: pythonregexpython-3.xpython-3.6

解决方案


使用正则表达式和计数器

演示:

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

推荐阅读