如何在文件中的每一行搜索列表的所有内容?

时间:2014-08-11 15:26:29

标签: python debugging arp

我还是Python的新手,在搜索文件中查找列表内容时遇到了一些问题。我需要的是在列表中搜索每个字符串的整个文件。因此,我需要遍历文件中每行的每个元素,并查找匹配项。如果它有帮助,我正在尝试将mac地址与arp表的内容进行匹配。我正在寻找的mac在列表中。整个arp表位于文件中。

这是我的代码无效:

mac_addr = []  
ipaddr = []

with open('arp_table_output.txt','r+') as myArps:
    for line in myArps:
        val = line.split()
        for x in mac_addr:
            if x in line:
                ipaddr.append(val[0])

以下是arp文件中一行的示例:

10.10.10.4     00:18:32   38ea.a792.1e62  Dynamic    ARPA  Bundle-Ether2.3

以下是mac_addr的代码片段:

 0100.0ccc.cccc  
 0100.0ccc.cccd  
 0180.c200.0000  
 0180.c200.0001  
 0180.c200.0002  
 0180.c200.0003  
 0180.c200.0004  
 0180.c200.0005  
 0180.c200.0006  
 0180.c200.0007    
 0180.c200.0008  
 0180.c200.0009  

1 个答案:

答案 0 :(得分:0)

我建议您首先从该行删除所有不必要的数据,这样您就可以得到您正在寻找的内容:

addr = [ x for x in line.split(" ") if x ][2]

然后将该值与列表中的值一起打印出来:

for target in mac_addr:
    print("'{}' vs '{}' -> {}".format(addr, target, addr == target))

所以你可以检查它们的区别。

最后:

with open('arp_table_output.txt','r+') as myArps:
    for line in myArps:
        # select *ONLY* the lines that contain the IP and MAC information in the input file
        if "Dynamic" in line:
            # here we extract the IP and the MAC from the line (python3 syntax)
            ip, _, mac, *_ = [ x for x in line.split(" ") if x ]
            # if you prefer python2: use `x, _, y, _, _, _ = …`

            # Test to printout what works and what does not. If none pass, the "in" test below will fail.
            for target in mac_addr:
                print("'{}' vs '{}' -> {}".format(mac, target, mac == target))

            if mac in mac_addr:
                ipaddr.append(ip)