Python:比较csv-fi中ip地址的有效方法

2024-05-16 01:33:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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'ing到盒子中来执行一些命令。在

考虑到我的情况,我想知道比较最后八位字节最有效的方法。如果有任何帮助,我们将不胜感激。在

另外,我在ssh'ing到盒子里没有任何问题,我计划使用paramiko库。在


Tags: 文件csvipsshxxx盒子bbbccc
2条回答

我想使用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()

文件内容:

^{pr2}$

输出:

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

一种简单的方法是使用pythonscsv库一次导入一行数据。然后使用列表理解将IP地址拆分为多个组件,取最后一个并将其添加到一个集合中。如果集合的结果是长度为1,那么您知道所有列都是相同的。在

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

import csv

reader = csv.reader(open(r"addresses.csv", "rb"), delimiter="\t")

for lCols in reader:
    try:
        if len(set([szIP.split(".")[3] for szIP in lCols])) == 1:
            print "\t".join(lCols)
    except:
        pass     # Skip non IP address formatted rows

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

如果CSV文件的格式不同,它只需要一个额外的列表理解步骤来将其转换为上面显示的数据。在

相关问题 更多 >