Python处理终端输出的多列数据
本文介绍了Python处理终端输出的多列数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
在网络设备上通过命令查看设备信息,如下:
我的做法是将第一行到最后一行单独存成一个文件,然后用下面的代码将每一行转换成一个列表,形成一个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屋!
查看全文