在python中从列表中分组ips

时间:2014-10-28 20:13:25

标签: python regex

我有一个包含100个逗号分隔IP的文本文件,它们之间只有空格。

我需要一次取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

我很确定我能用RegEx做到这一点,但我无法帮助,但我认为有更简单的方法可以做到。

任何和所有帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分: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)))