找出出现频率最高的IP地址并统计它出现的次数

Posted

技术标签:

【中文标题】找出出现频率最高的IP地址并统计它出现的次数【英文标题】:Find IP address which occurs most frequent and count the number of times that it appears 【发布时间】:2021-12-27 03:01:22 【问题描述】:

大家好 第一次不得不寻求帮助,但我现在有点困难。我从 8 月开始学习 python,我一直在挑战要在 11 月底完成,我希望能帮助我的代码正常工作。我的任务需要找到一个最频繁出现的 ip 地址并计算它出现的次数,而且这个信息必须显示给用户,我一直在提供 4 个具有 ips 的文件 .txt。我还需要使用非平凡的数据结构并内置 python 排序和/或搜索功能,在程序中使用函数、参数传递和返回值。以下是他们推荐我使用的示例数据结构:-

   `enter code here` 
    def analyse_logs(parameter):
    # Your Code Hear
    return something

    def extract_ip(parameter):
    # Your Code Hear
    return something

    def find_most_frequent(parameter):
    # Your Code Hear
    return something

    # Test Program
    def main():
    # Your Code Hear

    # Call Test Program
    main()

下面是我想出的,代码与提供的示例完全不同,但我所做的并没有直接给我输出,而是创建了一个新的文本文件,该文件已排序但现在是什么我正在寻找:-

     enter code here

    def sorting(filename):
    infile = open(filename)
    ip_addr = []
    for line in infile:
    temp = line.split()
    for i in temp:
      ip_addr.append(i)
    infile.close()
    ip_addr.sort()
    outfile = open("result.txt", "w")
    for i in ip_addr:
    outfile.writelines(i)
    outfile.writelines(" ")
    outfile.close()
    sorting("sample_log_1.txt")e here

我创建的代码已对 .txt 文件中的所有内容进行了排序,并输出了一直使用到最不常用的最频繁使用的内容。我所寻找的只是一种可以对 .txt 文件进行排序的算法,找到更频繁的 IP 地址,然后打印出该 ip 以及它出现的次数。我希望我已经提供了一切,我相信这可能是非常基本的东西,但我就是无法理解它。

【问题讨论】:

请修正缩进。并删除所有 enter code here 占位符。 看看collections.Counter() 感谢 Barmar,但不确定我是否应该使用 collections.counter 我认为“我还需要使用非平凡的数据结构并内置 python 排序和/或搜索功能”允许这样做 来自示例结构,前提是他们希望我们使用 3 个函数 def analyse_logs()、def extract_ip () 和 def find_most_frequent() 并打印结果 【参考方案1】:

您应该在变量中保留 IP 地址的重复次数。你可以使用字典。

ip_count_dict = "IP1": repeat_count, "IP2": repeat_count

当你第一次在你的列表中找到一个 IP 时,设置 repeat_count 1,然后如果你再次找到相同的 ip,只需增加计数器。

例如,

ip_count_dict = 
ip_list = ['1.1.1.1','1.1.1.2','1.1.1.3','1.1.1.1']
#Loop and count ips

#Final version of ip_count_dict '1.1.1.1':2 , '1.1.1.2':1, '1.1.1.3':1

使用这本字典,您可以存储所有 ip 并按其值排序。

P.S.:字典保留键值对,在完成所有计数后,您可以搜索“按值排序字典”。

【讨论】:

感谢您的帮助,让这一切变得更加清晰,只需要找到如何将它们放在一起

以上是关于找出出现频率最高的IP地址并统计它出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

统计一篇英文文章内每个单词出现频率,并返回出现频率最高的前10个单词及其出现次数

Sort如何进行排序,如何根据出现次数取IP

Linux作业-shell统计某文章中出现频率最高的N个单词并排序输出出现次数

大数据算法

算法1

Linux awk统计日志中出现过的IP(或出现次数最多的N个IP)