我还是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
答案 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)