2015-10-07 101 views
-1

我有2個文件比較兩個列表是從文件加載蟒蛇

FILE1.TXT

2C:E4:12:B2:EC:4B;20120731_10:06:36;20151005_13:44:51;195.116.227.97 
2C:E4:12:B2:26:E0;20120902_21:48:58;20151005_17:01:10;195.116.227.97 
E8:BE:81:87:76:10;20131006_20:23:44;20151004_23:56:37;195.116.227.97 
..... 

FILE2.TXT

C8:91:F9:98:13:4B;2015/09/24 13:30:53 
E8:BE:81:87:76:10;2015/09/24 13:30:41 
7C:03:D8:3A:BF:14;2015/09/24 13:32:35 
18:1E:78:E9:6E:C6;2015/09/24 13:33:46 
..... 

如果file1的第一列(MAC)是file2我想從file2中得到所有的行並打印,所以輸出結果如下:

E8:BE:81:87:76:10;2015/09/24 13:30:41 

我不知道如何在蟒蛇對比清單

我的代碼:

#!/usr/bin/env python 

list = {} 
list1 = {} 
file = open('file.txt','r') 
for line in file: 
     mac,first,last,ip = line.split(';') 
     list = mac 


file1 = open('file1.txt','r') 
for line in file1: 
     mac,data = line.split(';') 
     list1 = mac,data 
# ........ 

和現在有什麼?

+0

你爲什麼將名字初始化爲空*字典* ?!另外,不要使用名稱'list'作爲你自己的列表。如果你的問題是*「我怎麼能比較兩個列表?」*,那麼......'list1 == list2'? – jonrsharpe

回答

1

首先將文件1中的所有MAC地址存儲在集合中;現在你可以測試針對一組第二個文件:

with open('file1.txt', 'r') as inf: 
    mac_addresses = {line.partition(';')[0] for line in inf} 

with open('file2.txt', 'r') as inf: 
    for line in inf: 
     if line.partition(';')[0] in mac_addresses: 
      print(line.strip()) 

我用了一套修真建mac_addresses集;文件中的每一行都被拆分(使用str.partition(),在第一個分隔符上進行拆分的速度稍快),並且只保留第一個元素。

需要str.strip()調用來刪除每行都有的尾隨換行符。另外,如果在Python 3上,使用print(line, end='')