将lis中的“相似值”组合在一起

2024-04-25 00:53:56 发布

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

我正在解析从我的内容交付网络获取的日志文件。我已经到了我可以隔离日志文件的一部分,这是什么IP地址访问我们的网站。我想在这里实现的是从每个IP地址的一个大列表中得到一个前10个左右的IP地址列表。打印列表时获得的一些示例数据如下所示:

192.168.1.1
192.168.1.1
192.168.1.1
192.168.1.1
192.168.1.1
192.168.1.2
192.168.1.2
192.168.1.2
192.168.1.2
192.168.1.1
192.168.1.1
192.168.1.1

这些不是我从输出中得到的真正的IP,还有更多。不过,正如您所看到的,它们并没有组合在一起。我该怎么做这样的事?你知道吗

编辑:这是我的代码

import gzip
from collections import Counter
logFileName = open('C:\\Users\\Pawlaczykm\\Desktop\\fileNames.txt', 'r')
for line in logFileName.readlines():
    print 'Summary of: ' + line
    # use gzip to decompress the file
    with gzip.open('C:\\Users\\Pawlaczykm\\Desktop\\' + line.rstrip() + '.gz', 'rb') as f:
    for eachLine in f:
        parts = eachLine.split('\t')
        if len(parts) > 1:
            ipAdd = parts[2]
            c = Counter(ipAdd.splitlines())
            print(c.most_common(10))

Tags: 文件inimport列表forlinecounteropen
1条回答
网友
1楼 · 发布于 2024-04-25 00:53:56

您可以使用^{}来实现:

s = """192.168.1.1
192.168.1.1
192.168.1.1
192.168.1.1
192.168.1.1
192.168.1.2
192.168.1.2
192.168.1.2
192.168.1.2
192.168.1.1
192.168.1.1
192.168.1.1"""

from collections import Counter
c = Counter(s.splitlines())

现在您可以获得10个最常见的地址,即前10个地址列表:

print(c.most_common(10))

输出:

[('192.168.1.1', 8), ('192.168.1.2', 4)]

这是一个地址和计数的列表。你知道吗

在您的情况下,您需要向计数器提供所有地址:

addresses = []
for eachLine in f:
    parts = eachLine.split('\t')
    if len(parts) > 1:
        ipAdd = parts[2]
        addresses.append(ipAdd.strip())
c = Counter(addresses)
print(c.most_common(10))

相关问题 更多 >