2016-07-13 116 views
1

我想我發現了一個類似的問題在這裏(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 

編輯

確定它的工作....我是複製和粘貼到外殼和失敗,我救它作爲一個的.py和在模塊中運行它,而它的工作原理。任何人都知道爲什麼將意大利麪複製到殼上會失敗

+0

*「失敗」*的任何提前? – jonrsharpe

+0

編輯 - 失敗,因爲沒有結果 – AlexW

+2

你說的數據樣本有多大?你能否將數據文件作爲字典讀入內存? – Lost

回答

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

爲另一種解決方案是:

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尋址,並檢查是否一個完全包含在另一個。