根据txt文件中的搜索结果分配变量值

时间:2018-11-05 12:58:09

标签: python variables colors pixel switching

我是新手程序员(如果是的话!) 我正在处理一个简单的项目,该项目将吞下HP网络交换机配置文件并吐出交换机的png图像,其彩色端口与与这些端口关联的VLAN颜色匹配。

目前,我以手动方式可以正常工作。

我导入一个空白开关png文件 然后我指定接口1和2的交换机端口的当前颜色 然后,我指定要分配给他们的VLAN的颜色。 我运行一个命令,说“如果图像中的任何像素与x,x,x颜色匹配,然后将其更改为trunkport的值” 然后随颜色变化吐出新图像文件

这是一个例子:

import cv2
import numpy as np

SwitchImage = cv2.imread("BlankSwitchXX.png",1)

interface1 = [0,0,1]
interface2 = [0,0,2]

trunkport = [0,165,255]

SwitchImage[np.where((SwitchImage == interface1).all(axis = 2))] = trunkport
SwitchImage[np.where((SwitchImage == interface2).all(axis = 2))] = trunkport

cv2.imwrite("SwitchXX.png",SwitchImage) 

这很好用,但是最终目标是使用开关配置文件进行此分配。

这些cfg文件中充满了无用的文字,但是我感兴趣的是一组行

它们看起来像这样

trunk 1,2 Trk1 LACP

我想问一下是否有一种方法可以在此.txt文件中搜索字符串“ trunk”,然后如果它在主干上受到打击,请查看其后的下一个数字。它看到

1,2

并解释为与

相同
interface1
interface2

然后将“ trunkport”的值分配给这些变量。

我希望这是有道理的,如果没有请告诉我。其背后的想法是,大量的交换机将共享相同的配置格式,并且该程序可用于仅使用cfg文件直观地绘制VLAN颜色。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以使用re模块来匹配您感兴趣的行。如果您的数据在名为data.txt的文件中,则可以像以下方式获得它:

import re
with open('test.txt', 'r') as f:
    lines = f.readlines()
p = re.compile('^trunk')
matches = [l for l in lines if p.match(l)]
#output: ['trunk 1,2 Trk1 LACP\n']

现在您有了以'trunk'开头的行列表。有关如何在Python中执行正则表达式的详细信息,请参见https://docs.python.org/3/library/re.html#module-re

现在,如果数字紧接在“ trunk”之后,您就可以获取这些数字:

numbers = [m.split(' ')[1].split(',') for m in matches]
#output: [['1', '2']]

(这也可以按照Idlehands的建议使用正则表达式来完成)。

最后,您可以将这些数字添加到字典中以访问它们

{'interface' + x:'trunkport' for interfaces in numbers for x in interfaces}
#output: {'interface1': 'trunkport', 'interface2': 'trunkport'}