我正在建立一个简单的电子邮件验证程序,我需要知道如何将IP地址字符串转换为整数。我需要(例如IP地址)[a.b.c.d]都是它们自己的整数,这样我就可以看到每个是否在0-255的范围内。问题是有些点将它们分开,我不知道如何转换各个部分。
答案 0 :(得分:1)
正如Charles Duffy在评论中建议的那样,string.split()方法会将一个字符串拆分成几个子字符串,返回所有子字符串的列表。
如果你想在每个点上分开,那就使用string.split('。'),否则会在空白处拆分。
例如:
address = ['10.1.0.1']
address_split = address.split('.')
答案 1 :(得分:1)
你需要的是使用字符串的split
方法并判断每个数字在[0,255]之间:
>>> a = '127.0.0.1'
>>> all(map(lambda a : 0 <= a <= 255, [int(i) for i in a.split('.')]))
True
>>> b = '256.1.2.3'
>>> all(map(lambda a : 0 <= a <= 255, [int(i) for i in b.split('.')]))
False
首先使用split()获取IP地址的每个部分,然后获得一个列表:
>>> a = '127.0.0.1'
>>> alist = a.split('.')
>>> alist
['127', '0', '0', '1']
现在,使用list comprehension获取alsit的数量:
>>> num_list = [int(i) for i in alist]
>>> num_list
[127, 0, 0, 1]
我不使用try除了ValueError导致你的输入是IP,如果没有你可以按照其他答案。
然后,使用map来判断num_list中的每个数字是否在[0,255]中,它采用匿名函数和你想要判断的列表。它通过判断匿名函数来返回num_list中元素的每个结果的bool值:
>>> map(lambda num: 0 <= num <= 255, num_list)
[True, True, True, True]
最后,尝试all()函数,如果列表中的所有元素都为True,它将返回True,否则为False:
>>> all(map(lambda num: 0 <= num <= 255, num_list))
True
答案 2 :(得分:0)
略微建立Andrew Guy的建议:
try:
address_octets = [int(x) for x in address.split('.')]
except ValueError, e:
pass
# fallback from the assumption that it's an IPv4 string
# (Whatever that means for your code)
assert len(address_octets) == 4
# (or use a conditional and fallback as described above)
...请注意,我不知道您将如何处理解析失败,而且我不能完全确定您可以得到的唯一例外是ValueError
。