You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python统计txt日志最高频IP地址及出现次数实现求助

Python IP频次统计实现方案

实现逻辑说明

  • 完全匹配官方推荐的函数结构,所有功能通过函数参数传递和返回值实现
  • 使用字典作为非平凡数据结构统计IP出现频次,调用Python内置sorted()方法完成排序筛选
  • 支持同时读取4个IP txt文件,最终直接输出最高频IP及其出现次数

完整可运行代码

def extract_ip(file_list):
    """
    接收待读取的txt文件名列表,提取所有IP地址返回
    :param file_list: 存放IP的txt文件名列表
    :return: 所有提取到的IP组成的列表
    """
    ip_list = []
    for filename in file_list:
        with open(filename, 'r', encoding='utf-8') as f:
            for line in f:
                temp = line.strip().split()
                for item in temp:
                    # 简单校验IP格式,可根据实际需求调整
                    if '.' in item and len(item.split('.')) == 4:
                        ip_list.append(item)
    return ip_list

def analyse_logs(ip_list):
    """
    接收IP列表,统计每个IP的出现频次
    :param ip_list: 所有提取到的IP组成的列表
    :return: 键为IP、值为出现次数的频次字典
    """
    frequency_dict = {}
    for ip in ip_list:
        frequency_dict[ip] = frequency_dict.get(ip, 0) + 1
    return frequency_dict

def find_most_frequent(frequency_dict):
    """
    接收频次字典,筛选出出现次数最高的IP及次数
    :param frequency_dict: 键为IP、值为出现次数的频次字典
    :return: (最高频IP, 出现次数) 元组,若有多个IP频次相同并列最高则返回全部结果
    """
    # 调用Python内置sorted方法按频次从高到低排序
    sorted_items = sorted(frequency_dict.items(), key=lambda x: x[1], reverse=True)
    max_count = sorted_items[0][1]
    # 处理多个IP频次相同的情况
    most_frequent = [item for item in sorted_items if item[1] == max_count]
    return most_frequent if len(most_frequent) > 1 else most_frequent[0]

def main():
    # 此处替换为你实际的4个存放IP的txt文件名
    file_list = ["sample_log_1.txt", "sample_log_2.txt", "sample_log_3.txt", "sample_log_4.txt"]
    ip_list = extract_ip(file_list)
    frequency_dict = analyse_logs(ip_list)
    result = find_most_frequent(frequency_dict)
    # 打印结果
    if isinstance(result, list):
        print("多个IP出现频次并列最高:")
        for ip, count in result:
            print(f"IP地址:{ip},出现次数:{count}")
    else:
        ip, count = result
        print(f"出现频率最高的IP地址:{ip},出现次数:{count}")

if __name__ == "__main__":
    main()

代码调整说明

  • 你原有代码仅支持单个文件读取,本实现中extract_ip函数已适配多文件读取,只需把main函数里的file_list替换为你实际的4个文件名即可运行
  • 内置简单的IP格式校验,避免读取到文件内的非IP内容影响统计结果
  • 兼容多个IP频次并列最高的场景,会自动输出所有并列最高的IP及次数

内容的提问来源于stack exchange,提问作者lancer6098

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:15:07