我以为我在这里发现了一个类似的问题(Python search a file for text using input from another file)但这对我来说似乎没有用,打印是空的,没有找到,但是所有人都有definitley匹配
源文件示例是:
MAC Address
0800.0f5b.b739
0800.0f69.d860
0800.0f6b.9177
0800.0f6c.2e4d
0800.0f77.2879
0800.0f7f.4c07
0800.0f83.4785
0800.0f9c.f608
数据文件样本是:
MAC Address IP Address
000c.2912.57db 10.1.7.254
000c.294a.4b75 10.1.7.253
002a.6a5e.e381 10.1.6.3
0050.56ac.5f41 10.1.7.8
0050.56ac.5f41 10.1.7.9
0050.56ac.6067 10.1.6.249
0050.56ac.6067 10.1.6.254
0050.56ac.9d49 10.1.7.104
0800.0f5b.b739 10.1.7.153
0050.56ac.e9c9 10.1.7.250
0800.0f48.7f40 10.1.6.180
0800.0f51.9d99 10.1.6.112
0800.0f51.a32a 10.1.6.47
0800.0f51.a915 10.1.6.241
使用源文件我想从数据文件中找到匹配的IP地址。我试过从其他问题看到的样本
d_file = 'C:\Python Scripts\VLAN_Data.txt'
s_file = 'C:\Python Scripts\SourceData.txt'
keywords = set()
with open(s_file) as list_file:
for line in list_file:
if line.strip():
keywords.add(line.strip())
with open(d_file) as master_file:
for line in master_file:
if set(line.split()[:-1]) & keywords:
print line
好吧它确实有效....我是复制并粘贴到shell中它失败了,我将它保存为.py并在模块中运行它而且它可以工作。谁知道为什么将面食复制到贝壳会失败?
答案 0 :(得分:2)
我会这样做:
with open(r'C:\Users\evkouni\Desktop\file_sample.txt', 'r') as f_in:
content = f_in.readlines()
add_dict = {}
for line in content:
add_dict[line.split()[0]] = line.split()[1]
with open(r'C:\Users\evkouni\Desktop\target.txt', 'r') as f_t:
content = f_t.readlines()
matches = {}
for line in content:
if line.strip() in add_dict:
matches[line.strip()] = add_dict[line.strip()]
continue
print(matches)
#{'0800.0f5b.b739': '10.1.7.153'}
第一个with
块加载MAC到IP地址块,并将这些对存储在字典add_dict
中。
第二个with
块打开目标文件,并逐行搜索以前存储的密钥。当它找到它们时,它将该对存储在名为matches
的新词典中。容器matches
的类型取决于您计划使用它的内容。
答案 1 :(得分:1)
另一个解决方案是:
d_file = 'Data\data.txt'
s_file = 'Data\source.txt'
keywords = set()
with open(s_file) as list_file:
for line in list_file:
if line.strip():
keywords.add(line.strip())
data = set()
with open(d_file) as master_file:
for line in master_file:
data.add(line.strip().split(' ')[0])
print keywords.issubset(data)
此解决方案基于set
交叉点:创建两组MAC地址并检查其中一个是否完全包含在另一个中。