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
相关产品推荐
相关产品推荐

