拆分文件包含类似的行

时间:2016-11-10 22:12:53

标签: python python-2.7

我有一个包含许多接口相关信息的文件。为简单起见,我的例子只有两个。

我需要能够把它分成不同的变量,我打算稍后再使用。例如,从下面的文本中我想创建名为eth1_ip的变量,其值为10.196.135.30,eth1_mask的变量为255.0.0.0,eth2_ip的值为192.168.4.2等。

我经历过不同的"分裂"和" readfiles"情景,但避风港已经能够解决这个问题。

我是python的新手,任何提示都会受到赞赏。谢谢。

eth1:  
     Flags: (0x1043) UP BROADCAST MULTICAST TRAILERS ARP RUNNING   
     Type: GIGABIT_ETHERNET  
     inet is: 10.196.135.30 Vlan: 0  
     Netmask: 255.0.0.0  
     Ethernet address is 00:08:25:21:f8:a0  
     Metric is 0:  
     Maximum Transfer Unit size is 1500    

eth2:  
     Flags: (0x1003) UP BROADCAST MULTICAST TRAILERS ARP   
     Type: UNKNOWN_TYPE  
     inet is: 192.168.4.2 Vlan: 0  
     Ethernet address is 00:08:25:21:f8:a1  
     Metric is 0:  
     Maximum Transfer Unit size is 1500  

我的第一次尝试包括这样的想法:

#!/usr/bin/python

import re, os, sys, fnmatch
import telnetlib
import sys
import time
import difflib
import shutil


def gleen_macs():
    text = open('show_interfaces.txt', 'r')
    for line in text.readlines():
        #print line   
        if re.match('(     Ethernet address)(.*)', line):
            values = line.split('is')
            print values[1]

def menu():
    get_macs()

menu()

我首先专注于mac。我可以拆分它们,但不能按照我的意愿将它们分配给变量。 (" get_macs()"函数只是我用来生成文件的telnetlib位。这是我希望的,不包括在这里。)

2 个答案:

答案 0 :(得分:0)

只需单步执行该文件,在每一行中查找关键字,如果某行有您需要提取的内容,请将其保存在字典中,

results = dict()
with open('eth.txt') as f:
    for line in f:
        line = line.strip()
        if line.endswith(':') and not line.startswith('Metric'):
            eth = line[:-1]
        elif line.startswith('inet'):
            line = line.split(':')
            ip, _ = line[1].split()
            results[eth + '_ip'] = ip
        elif line.startswith('Netmask'):
            _, mask = line.split(':')
            mask = mask.strip()
            results[eth + '_mask'] = mask

>>> results
{'eth2_ip': '192.168.4.2', 'eth1_ip': '10.196.135.30', 'eth1_mask': '255.0.0.0'}
>>>

答案 1 :(得分:-1)

(0x1043) UP BROADCAST MULTICAST TRAILERS ARP RUNNING
1500

输出:

"10.196.135.30 Vlan: 0"

我会让你进行额外的解析,例如从actionButton(style= "...")中获取IP。