使用其他文本文件

时间:2016-07-13 12:18:37

标签: python

我以为我在这里发现了一个类似的问题(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并在模块中运行它而且它可以工作。谁知道为什么将面食复制到贝壳会失败?

2 个答案:

答案 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地址并检查其中一个是否完全包含在另一个中。