python 對ip段處理

來源:互聯網
上載者:User

需求:  ip段 20.20.20.20-20.21.11.11 插入資料庫

-------------------------------------------------------

寫下來供以後重用或有需要的同行~

#產生下一次迴圈的邊界條件def get_side(pos,now):    global begin,end    global first,last    #   find_side                   #    #---------in---------------    #begin 110.67.1.95 end 111.67.1.95    #first 110.x.x.x   last 111.x.x.x    #pos 110 now 0    #---------out--------------    #first 110.67.x.x  last 111.255.x.x    #                               #    find_side = lambda begin, end, pos, fisrt, last, now:\                ( pos == first[now] and begin[now + 1] or 1, pos == last[now] and end[now + 1] or 255)    first[now + 1],last[now + 1] = find_side(begin,end,pos,first,last,now)    return range(first[now + 1],last[now + 1] + 1)def gen_ip(ip):    '''    in in 110.67.1.30-110.67.1.32    out '{"110.67.1.30", "110.67.1.31", "110.67.1.33"}'    '''    #ip段範圍    global begin, end    #臨時列表,儲存邊界條件    global first, last    sides = ip.split('-')    begin = map(lambda x:int(x),sides[0].split('.'))    end   = map(lambda x:int(x),sides[1].split('.'))    first[0] = begin[0]    last[0] = end[0]    ip_str = "'{%s}'"    tmp = ""    for pos_one in range(begin[0],end[0] + 1):        for pos_two in get_side(pos_one,0):            for pos_three in get_side(pos_two,1):                for pos_four in get_side(pos_three,2):                    str = '"%d.%d.%d.%d",' % (pos_one, pos_two, pos_three, pos_four)                    tmp += str    return ip_str % tmp.rstrip(',')

思路為從ip起始段的首位開始迴圈,共4層迴圈。 

整個轉換需要注意的問題只有一個, 如何在迴圈內正確的處理邊界值。

例如 10.10.10.10-10.10.20.1

在第三個欄位應該分別進行如下迴圈:  10.10 - 10.255; 11.1 -11.255 .... 19.255;  20.1

考慮一下,這裡其實分為三種情況,當前迴圈的是起始、過渡和終止欄位。

因此#14 行做了兩個三元操作,大致類似於  pos == from ? begin+1 : 1, pos == to ? end + 1 :255

實現了根據當前迴圈內容與起始段、終止段是否一致,寫入對應的邊界

當然,在特殊情況下1. ip前兩段不同,後兩段一致時 會導致缺少部分資料,不過因為這次我在項目裡用到的IP範圍不可能達到後面這個範圍,因此忽略了這個bug。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.