【发布时间】:2017-04-25 22:18:20
【问题描述】:
我正在尝试编写一个在 Cisco 路由器上运行命令并将 IP 列表写入文本文件的程序。我能够将所有 IP 写入文件,然后成功获取所有 IP。现在我遇到麻烦的部分是我不知道我将从列表中获得多少 IP。由于我想将从文件中获得的每个 IP 与用户定义的 IP 进行比较,我想要一种方法来创建基于 IP 数量的动态变量,或者以某种方式遍历所有 IP 并将其与用户的 IP 进行比较。
import re
import ipaddr
userIP = raw_input('Enter IP address to compare i.e, 10.10.10.0/24:')
ipFile = ("router.com.txt")
found = []
with open(ipFile, 'r') as f:
for text in f.readlines()[1:]: #File had a blank line so this skips it
text = text.rstrip()
regex = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})', text)
#print regex
found.append(regex)
print found
print len(found) - 1
这是我运行它时得到的:
[['10.10.20.192/27'], ['10.10.40.0/24'], []]
2
现在我苦苦挣扎的困难部分是如何动态地将其中的每一个与变量 userIP 进行比较。
#if userIP.overlaps(found):
#print "Overlapping IPs!!"
#else:
#print "Does not Overlap!!"
谢谢 达蒙
【问题讨论】:
-
如果您使用 Python 3.3+,您似乎可以使用内置的
ipaddress库。但是,对于 Py2.7,您仍然可以使用一个反向移植包:pypi.python.org/pypi/py2-ipaddress -
我正在使用 ipaddr.py,它对我来说工作正常。我需要动态变量部分的帮助
-
“动态变量”是什么意思?
-
我是编程新手,所以这是我想到的第一件事。由于列表长度是动态的,除了动态分配创建 IP 并为它们分配所有 IP 之外,我想不出别的办法。如果有更好的方法我会用它
-
Damon:大多数容器,如列表和字典,都是可变的,这意味着它们的内容几乎可以随时更改。对我来说,“动态变量”是程序在运行时创建的和名称——这通常被认为是一个坏主意,通常可以通过使用可变容器来避免。
标签: python arrays python-2.7 list