[英]How to turn string to int with with characters within it?
我正在構建一個簡單的電子郵件驗證程序,我需要知道如何將IP地址字符串轉換為整數。 我需要(示例IP地址)[abcd]都是它們自己的整數,以便我可以查看每個整數是否在0-255的范圍內。 問題是有一些點將它們分開,我不知道如何轉換各個部分。
正如Charles Duffy在評論中建議的那樣,string.split()方法會將一個字符串拆分為幾個子字符串,並返回所有子字符串的列表。
如果要在每個“點”處分割,請使用string.split('。'),否則它將在空白處分割。
例如:
address = ['10.1.0.1']
address_split = address.split('.')
您需要使用字符串的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']
現在,使用列表推導來獲取一個別名的數量:
>>> num_list = [int(i) for i in alist]
>>> num_list
[127, 0, 0, 1]
我不使用try,除了ValueError會導致您的輸入是IP,否則,您可以按照其他答案進行操作。
然后,使用map判斷num_list中的每個數字是否都在[0,255]中,它需要一個匿名函數和您要判斷的列表。 通過判斷匿名函數,它返回num_list中元素的每個結果的布爾值:
>>> 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
在安德魯·蓋伊(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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.