我有一个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库。
答案 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文件格式不同,则只需要一个额外的列表推导步骤即可将其转换为上面显示数据的方式。