如何将txt中配对的localpref与via内容打印在同一行?
问题解决思路与代码实现
你的核心问题是原代码将localpref和via行单独输出,而编辑1的代码错误地判断同一行同时包含两个关键词(实际它们分布在不同行),导致无输出。正确做法是成对收集每组的两个值,再合并输出。
修正后的代码
import sys with open(open_file, 'r') as LP: all_data = LP.readlines() current_group = {} keys = ['localpref', 'via'] for line in all_data: line = line.strip() # 跳过空行和分隔线 if not line or line.startswith('---'): # 收集满一组就输出 if len(current_group) == 2: print('-'*65) print(f"{current_group['localpref']} {current_group['via']}") sys.stdout.flush() current_group = {} continue # 提取关键词对应的值 for key in keys: if key in line: # 只分割一次,保留值的完整性 _, value = line.split(maxsplit=1) current_group[key] = value break # 处理最后一组(文件末尾无分隔线的情况) if len(current_group) == 2: print('-'*65) print(f"{current_group['localpref']} {current_group['via']}") sys.stdout.flush()
代码说明
- 分组存储:用
current_group字典临时保存每组的localpref和via值,每碰到分隔线就检查是否收集完成一组,完成则输出并重置字典。 - 过滤无效行:直接跳过空行和分隔线,只处理有效数据行。
- 安全分割:
split(maxsplit=1)确保即使值中包含空格,也能完整提取(比如via的后续值有空格也不会被拆分)。 - 收尾处理:循环结束后检查是否还有未输出的最后一组,避免遗漏。
输出结果
运行后会生成你需要的格式:
----------------------------------------------------------------- localpref 300, via et-0/1/5.0 ----------------------------------------------------------------- localpref 300 via et-0/1/5.0 ----------------------------------------------------------------- localpref 300, via ae0.0 -----------------------------------------------------------------
内容的提问来源于stack exchange,提问作者Kanzeon
相关产品推荐
相关产品推荐

