2014-10-28 69 views
-1

我有一個文本文件,其中包含逗號分隔的IP數百個,它們之間只有空格。從python列表中分組ips

我需要一次拿10個,並把它們放在另一個代碼塊中。因此,對於IP地址:

1.1.1.1, 2.2.2.2, 3.3.3.3, 4.4.4.4, ... 123.123.123.123, 124.124.124.124, 125.125.125.125

我需要:

codethings [1.1.1.1, 2.2.2.2, ... 10.10.10.10] code code code 
codethings [11.11.11.11, 12.12.12.12, ... 20.20.20.20] code code code 
codethings [21.21.21.21, 22.22.22.22, ... 30.30.30.30] code code code 

etc 

我敢肯定,我可以用正則表達式做,但我不禁覺得有更簡單的方法可以做到它。

任何及所有的幫助表示讚賞。謝謝!

+0

分割字符串,然後使用普通的切片,例如一個'=地圖( str,range(50));打印[0:10]' – 2014-10-28 20:15:10

回答

0

上逗號分割,從每個元素帶過多的空白:

txt = '''1.1.1.1, 2.2.2.2, 3.3.3.3, 4.4.4.4, 
    123.123.123.123, 124.124.124.124, 125.125.125.125''' 

ip_list = map(str.strip, txt.split(',')) 

至於分頁,請參閱答案:Paging python lists in slices of 4 itemsIs this how you paginate, or is there a better algorithm?

我也建議(只是要確定),以過濾掉無效的IP不會忽略,例如使用一臺發電機和socket模塊:上逗號

from __future__ import print_function 
import sys 
import socket 

txt = '''1.1.1.1, 2.2.2.2, 3.3.3.3, 4.4.4.4, 
    123.123.123.123, 124.124.124, 555.125.125.125,''' 

def iter_ips(txt): 
    for address in txt.split(','): 
     address = address.strip() 
     try: 
      _ = socket.inet_aton(address) 
      yield address 
     except socket.error as err: 
      print("invalid IP:", repr(address), file=sys.stderr) 

print(list(iter_ips(txt))) 
+0

是否可以使用文本文件本身,而不是將IP直接放入腳本中? (我目前無法嘗試,但我很好奇......) 而不是 'txt ='''1.1.1.1,2.2.2.2,3.3.3.3,4.4.4.4, 123.123。 123.123,124.124.124,555.125.125.125,''''' do 'txt = open(「text.txt」)' ?? – rmp5s 2014-10-29 00:06:37