簡體   English   中英

如何將字符串轉換為帶有int字符的int?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM