如何使用Python Pandas处理多log前缀txt文件提取共有IP并导出Excel?
Python Pandas 实现多日志文件IP比对导出方案
前置依赖
首先安装需要的第三方库:
pip install pandas openpyxl
完整实现代码
#!/usr/bin/env python3 import os import pandas as pd # -------------------------- 配置参数(按需修改) -------------------------- LOG_DIR = "/var/logs" # 日志文件存放的目录 TARGET_FILE_PREFIX = "log" # 目标文件的文件名前缀 OUTPUT_PATH = "ip_result.xlsx" # 最终输出的Excel文件路径 # ------------------------------------------------------------------------ ip_column_list = [] # 遍历目录读取所有符合条件的txt文件 for file_name in os.listdir(LOG_DIR): # 筛选log开头、.txt结尾的文件 if file_name.startswith(TARGET_FILE_PREFIX) and file_name.endswith(".txt"): full_file_path = os.path.join(LOG_DIR, file_name) # 读取txt中IP,默认每行1个IP,无表头 single_file_ips = pd.read_table( full_file_path, header=None, # 不需要把第一行当表头 on_bad_lines="skip" # 自动跳过不符合格式的行 )[0].unique() # 去重当前文件的重复IP,不需要去重可删除该方法 # 转成Pandas Series,列名为对应文件名 ip_column = pd.Series(single_file_ips, name=file_name) ip_column_list.append(ip_column) # 合并所有IP列,长度不一致的位置自动填充空值 result_df = pd.concat(ip_column_list, axis=1) # 计算所有文件共有的IP(所有列的非空IP交集) common_ip_set = None for col_name in result_df.columns: current_col_ips = set(result_df[col_name].dropna()) common_ip_set = current_col_ips if common_ip_set is None else common_ip_set & current_col_ips # 新增Common IPs列存共同IP result_df["Common IPs"] = pd.Series(list(common_ip_set)) # 导出到Excel,不写入行索引 result_df.to_excel( OUTPUT_PATH, sheet_name="IP对比结果", index=False, engine="openpyxl" )
注意事项
- 如果你的txt文件中IP不是单独占一行,而是和其他内容用分隔符隔开,可以在
pd.read_table中添加sep="分隔符"参数提取对应列的IP - 共同IP列长度不足的位置会自动填充空值,不影响原有列的内容
内容的提问来源于stack exchange,提问作者Peter Walker
相关产品推荐
相关产品推荐

