Python:比较csv文件中的IP地址的有效方法

时间:2015-06-15 06:41:58

标签: python python-2.7 pandas compare ip-address

我有一个csv文件,其中包含以下ip地址列表:

SSH IP                NFS IP                iSCSI IP
10.xxx.xxx.aaa        172.xxx.xxx.aaa       172.yyy.xxx.aaa
10.xxx.xxx.bbb        172.xxx.xxx.bbb       172.yyy.xxx.bbb
10.xxx.xxx.ccc        172.xxx.xxx.ccc       172.yyy.xxx.ccc
10.xxx.xxx.ddd        172.xxx.xxx.ddd       172.yyy.xxx.ddd
...                   ...                   ...
...                   ...                   ...

我想比较SSH IP,NFS IP和iSCSI IP中的最后一个八位字节,如果它们匹配,我想通过ssh进入框中执行一些命令。

考虑到我的情况,我想知道比较最后八位字节的最有效方法。对此的任何帮助都将受到高度赞赏。

P.S。我在ssh&box中没有任何问题,我打算使用paramiko库。

2 个答案:

答案 0 :(得分:0)

我想使用re,这是一个例子。

代码:

import re
regex = re.compile('([^\.]+\.){3}(?P<ssh>[^\s\n\.]+)(\s+([^\.]+\.){3}(?P=ssh)){2}\n')

with open(file) as ff:
    for line in ff:
        m = regex.search(line)
        if m:
            # do what you want
            print m.group()

文件内容:

SSH IP                NFS IP                iSCSI IP
10.xxx.xxx.aaa        172.xxx.xxx.aaa       172.yyy.xxx.aaa
10.xxx.xxx.bbb        172.xxx.xxx.bbb       172.yyy.xxx.bbb
10.xxx.xxx.ccc        172.xxx.xxx.ccc       172.yyy.xxx.ccc
10.xxx.xxx.ddd        172.xxx.xxx.ddd       172.yyy.xxx.ddd
10.xxx.xxx.eee        172.xxx.xxx.eee       172.yyy.xxx.eeef
10.xxx.xxx.fff        172.xxx.xxx.fff       172.yyy.xxx.ffg

输出中:

10.xxx.xxx.aaa        172.xxx.xxx.aaa       172.yyy.xxx.aaa

10.xxx.xxx.bbb        172.xxx.xxx.bbb       172.yyy.xxx.bbb

10.xxx.xxx.ccc        172.xxx.xxx.ccc       172.yyy.xxx.ccc

10.xxx.xxx.ddd        172.xxx.xxx.ddd       172.yyy.xxx.ddd

答案 1 :(得分:0)

一种简单的方法是使用Python CSV库一次导入一行数据。然后使用列表推导将IP地址拆分为组件,取最后一个并将其添加到集合中。如果集合的结果长度为1,则表示所有列都相同。

我假设上面的数据显示了CSV文件,并且是以制表符分隔的:

1

如果您正在寻找最快的解决方案,我强烈建议您根据此代码计算任何正则表达式解决方案,以确定哪个是最佳解决方案,因为并不总是明显哪个是最好的。

如果您的CSV文件格式不同,则只需要一个额外的列表推导步骤即可将其转换为上面显示数据的方式。