首页 > 代码库 > Python入门(三)

Python入门(三)

  我要使用Python来辅助解析路由器配置中的Vlan、Eth-Trunk和interface的信息,在这些信息当中,需要体现出Vlan和interface、Eth-Trunk和interface之间的关系。


  网上已经有很多比较规整的Python入门的文章,比较规整的入门教程基本上都是从最基础的开始介绍Python语言。这里我就按照我的需要来介绍Python的入门,直接是通过问题出发来学习Python的使用。


  第一个来解决的是如何获得设备的名称,在前面介绍过,设备的名称是disp cur命令后,然后去找“sysname XXX”这样的配置。因此,我们需要使用Python在配置文件中来查找“sysname XXX”这样的一段字符串,找到该字符串以后,“sysname”是配置的含义,而“XXX”才是我们想要的设备名称。


  那么来整理一下步骤:

  1、打开路由器的配置文件

  2、将路由器的全部内容读入

  3、逐行的查找“sysname XXX”字符串(XXX代表设备具体的名称,由于一台设备只有一个设备名,因此只要找到第一处符合的内容即可)

  4、找到后取得设备的名称


  按照上面的步骤一步一步来即可。

  1、打开路由器的配置文件:

filename = ‘XXXX.log‘

f = file(filename, ‘r‘)

  2、将路由器的内容全部读入

content = f.readlines()

  3、逐行查找“sysname XXXX”

for c in content:
    txt = re.search(‘sysname‘, c)

  4、找到后取得设备的名称并结束查找

    if txt != None:
        print c
        print c.split()[1]
        break


  上面是用Python完成的每个步骤的代码,这里简单介绍一下。

  file()是一个系统的函数,用来打开文件。打开文件时需要指定打开文件的路径和名称,然后要指定打开文件的方式,这里打开的文件是“XXXX.log”,打开的方式为“r”,也就是只读方式打开文件。打开文件后会返回一个文件对象,使用这个文件对象即可做有关文件相关的操作,比如读取、写入、关闭等操作。在上面的代码中,使用了f.readlines()将文件中的内容读取到content变量中。


  当把文件全部读入到content变量中后,使用for循环来遍历content中的每行内容。然后使用re.search()搜索该行是否有“sysname”字符串。因为每台设备名称是不相同的,因此只能搜索该行是否有“sysname”,如果有的话就使用print来输出这行的内容。


  在代码中for c in content是将content的每行内容依次给到c变量中,然后用re.search()依此在c变量中查找是否存在“sysname”。搜索到以后会先输出print c,然后再print c.split()[1]。


  c.split()[1]是什么鬼?c是“sysname XXXX”,而这时我们需要的是“XXXX”,而不需要“sysname”,因此使用split()函数将这个字符串按空格拆分,分为“sysname”和“XXXX”两个字符串的列表。第一个字符是[0],第二个字符串是[1]。


  举个例子看一下:

>>> c = ‘sysname XXXX‘
>>> print c.split()
[‘sysname‘, ‘XXXX‘]
>>> print c.split()[0]
sysname
>>> print c.split()[1]
XXXX
>>>


  好了,基本上就介绍这么多,完整的代码如下:

import re

filename = ‘XXXX.log‘

f = file(filename, ‘r‘)
content = f.readlines()

for c in content:
    txt = re.search(‘sysname‘, c)
    if txt != None:
        print c
        print c.split()[1]
        break

f.close()


  上面的代码中第一行import re是导入了一个库,这个库是一个正则表达式的库,正则表达式就是用来匹配文本的。


  代码虽短,但是代码中包含了正则表达式、文件操作、循环遍历、字符串等内容。这些内容如果读者不熟悉可以更进一步的搜索相关资料参考。


  我是为了使用Python语言,而没有深入的学习Python语言,毕竟我使用到的内容不深,如果对于真正需要深入掌握和理解Python语言的,还是先掌握Python语言的基础知识为好。


  注:如果没有什么Python的基础,那么一定要掌握print语言,该语句是用来进行输出的语句,在上面不明白的语句后面,加一条print即可观察当前处理后的变量的值。比如需要查看content中的内容,那么可以直接写如下两句:

for c in content:
    print c

  在学习的过程中注意这一点哦!当然,在随着深入的学习的过程中,最好是去掌握程序的调试,这样才会更好的了解程序的执行过程,和排除程序中的问题。

本文出自 “无觉的BLoG” 博客,请务必保留此出处http://wujue.blog.51cto.com/11999347/1859112

Python入门(三)