我是Python的新手,我正在尝试解析一些网络数据,以根据某个ip地址所在的城市来确定它的位置。我有下面的代码工作。但是我有几百行的信息,我想让我的脚本通过,并为每一行创建一个特定的if/else语句,但似乎没有效率。你知道吗
from netaddr import *
def locateip(ipaddr):
if IPAddress(ipaddr) in IPNetwork('10.10.10.0/24'):
return 'New York', '10', '10.10.10.0', '10.10.10.0/24', '255.255.255.0'
elif IPAddress(ipaddr) in IPNetwork('10.10.20.0/24'):
return 'Chicago', '20', '10.10.20.0', '10.10.20.0/24', '255.255.255.0'
elif IPAddress(ipaddr) in IPNetwork('10.10.20.0/24'):
return 'Dallas', '30', '10.10.30.0', '10.10.30.0/24', '255.255.255.0'
ipaddrsource = raw_input('Source Ip Address:')
try:
srclocation, srcvlan, srcnetwork, srcnetworkcidr, srcsubnetmask = locateip(ipaddrsource)
except Exception, e:
print e
print 'Location: ' + str(srclocation)
print 'Vlan: ' + str(srcvlan)
print 'Network: ' + str(srcnetwork)
print 'Network/CIDR: ' + str(srcnetworkcidr)
print 'Subnet Mask: ' + str(srcsubnetmask)
我所有的数据都被格式化成一个文本文件,如下所示。你知道吗
location vlan network network+cidr subnetmask
New York 10 10.10.10.0 10.10.10.0/24 255.255.255.0
Chicago 20 10.10.20.0 10.10.20.0/24 255.255.255.0
Dallas 30 10.10.30.0 10.10.30.0/24 255.255.255.0
我一直在尝试让下面的工作,但我还没有弄清楚如何发送一行文本文件到if语句返回其余的元数据。任何帮助都将是伟大的!你知道吗
from netaddr import *
def locateip(ipaddr):
f = open('networkinfo.txt','r')
for line in f:
networkdata = line.split()
if IPAddress(ipaddr) in IPNetwork(networkdata[3]):
return networkdata[0], networkdata[1], networkdata[2], networkdata[3], networkdata[4]
ipaddrsource = raw_input('Source Ip Address:')
try:
srclocation, srcvlan, srcnetwork, srcnetworkcidr, srcsubnetmask = locateip(ipaddrsource)
except Exception, e:
print e
print 'Location: ' + str(srclocation)
print 'Vlan: ' + str(srcvlan)
print 'Network: ' + str(srcnetwork)
print 'Network/CIDR: ' + str(srcnetworkcidr)
print 'Subnet Mask: ' + str(srcsubnetmask)
您的行以一个位置开始,该位置本身可以包含空格。因为这样简单的
str.split()
是行不通的:注意这里的
New
和York
是两个独立的条目,使得networkdata[3]
是错误的条目。你知道吗您需要从末端拆分,并限制拆分的数量:
演示:
其中
None
仍然在任意宽度的空格上进行拆分,并从结尾处剥离换行符,但是4
将拆分限制为4个分隔符,使New York
保持不变。你知道吗或者,作为一个有一些小改进的完整方法:
可能是输入格式实际上使用了制表符:
在这种情况下,您可能希望改为使用
csv
模块读取格式:相关问题 更多 >
编程相关推荐