Python处理终端输出的多列数据

查看:498
本文介绍了Python处理终端输出的多列数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

  1. 在网络设备上通过命令查看设备信息,如下:

我的做法是将第一行到最后一行单独存成一个文件,然后用下面的代码将每一行转换成一个列表,形成一个List of Lists. 以下是这部分的代码:

int_status = 'int_status.txt'
try:
    file = open(int_status)
    interface_stats = file.readlines()
    file.close()

except Exception as ex:
    print("Cannot read configuration (%s), terminate script")
    sys.exit(1)
    
interface_status_list = []

for line in interface_stats:
    interface_status = line.split()
    interface_status_list.append(interface_status)

但是有很多这样的命令,总不能每一个命令输出都存成一个文件吧。
是否有一种办法,例如通过正则表达式将上述截图的命令输出单独取出来,再转换成List of Lists呢?

非常感谢!

解决方案

我尝试了以下方法:

import re
import sys

config_file = 'config_file.log'

# config_file = sys.argv[1]
with open(config_file) as file_obj:
    data_buff = file_obj.read()

mixRegex = re.compile(r'^Interface\s+IP-Address\s+Status.*\n'
                    r".*\n*",re.MULTILINE)
mix_match = mixRegex.findall(data_buff)
print(mix_match)

以上代码运行以后输出如下:

['Interface                      IP-Address      Status          Protocol Vrf-Name\nLoopback0                      124.53.16.87   Up              Up       default \n']

可以看到,已经匹配出来了一部分,但是只能匹配到第二行。
请教一下,

mixRegex = re.compile(r'^Interface\s+IP-Address\s+Status.*\n'
                    r".*\n*",re.MULTILINE)

这一句应该如何修改才是?

我修改为:

mixRegex = re.compile(r'^Interface\s+IP-Address\s+Status.*\n'
                    r".*\n*\n.*\n*",re.MULTILINE)              

匹配结果就又增加两行,但是我提前也不知道总共有多少行呢。

我修改为以下代码,解决了我的问题:

import re

config_file = 'config_file.log'

with open(config_file) as file_obj:
    data_buff = file_obj.read()

mixRegex = re.compile(r'^Interface\s+IP-Address\s+Status.*\n'
                      r'(^\w+\d+.*\n)+'
                      r'^RP.*#'
                      ,re.MULTILINE)

mix_match = mixRegex.search(data_buff)
print(mix_match.group())

这篇关于Python处理终端输出的多列数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆