2013-05-03 109 views
0

我有兩個文件:第一個包含術語及其頻率:比較兩個文件,並找到在蟒蛇匹配詞

table 2 
apple 4 
pencil 89 

第二個文件是一個字典:

abroad 
apple 
bread 
... 

我想檢查第一個文件是否包含第二個文件中的任何單詞。例如,第一個文件和第二個文件都包含「apple」。 我是python的新手。 我嘗試了一些,但它不起作用。你可以幫幫我嗎 ?謝謝

for line in dictionary: 
    words = line.split() 
    print words[0] 

for line2 in test: 
    words2 = line2.split() 
    print words2[0] 

回答

4

事情是這樣的:

with open("file1") as f1,open("file2") as f2: 
    words=set(line.strip() for line in f1) #create a set of words from dictionary file 

    #why sets? sets provide an O(1) lookup, so overall complexity is O(N) 

    #now loop over each line of other file (word, freq file) 
    for line in f2: 
     word,freq=line.split() #fetch word,freq 
     if word in words:  #if word is found in words set then print it 
      print word 

輸出:

apple 
+0

如果有多個匹配項,此代碼不起作用:( – user951487 2013-05-03 09:25:49

+0

@ user9514870這是因爲你說:*「我想檢查第一個文件是否包含**任何**字」*,你可以刪除'break '聲明得到所有常見的詞 – 2013-05-03 09:27:48

+0

現在它的作品謝謝你Ashwini :) – user951487 2013-05-03 09:30:53

2

它可以幫助你:

file1 = set(line.strip() for line in open('file1.txt')) 

file2 = set(line.strip() for line in open('file2.txt')) 

for line in file1 & file2: 

    if line: 

     print line 
+0

單列表這是行不通的一個文件中包含的單詞和其他含有空格分隔值。 – 2013-05-03 09:28:30

2

這裏是你應該做的:

  • 首先,你需要把所有的字典單詞放在某個地方,你可以很容易地查看它們。如果你不這樣做,每次你想檢查另一個文件中的一個單詞時,你必須閱讀整個字典文件。

  • 其次,您需要檢查文件中的每個單詞是否在您從字典文件中提取的單詞中。

在第一部分,你需要使用一個listset。這兩者之間的區別在於list會保留您放入物品的訂單。 A set是無序的,因此,您從字典文件中首先閱讀哪個單詞並不重要。此外,查找某個項目時,set會更快,因爲這就是它的用途。

要查看某個項目是否在一個集合中,您可以執行:item in my_set,它可以是True或False。

2

我在try.txt你的第一雙列表和try_match.txt

f = open('try.txt', 'r') 
f_match = open('try_match.txt', 'r') 
print f 
dictionary = [] 
for line in f: 
    a, b = line.split() 
    dictionary.append(a) 

for line in f_match: 
    if line.split()[0] in dictionary: 
     print line.split()[0] 
+0

它的作品謝謝你的反托拉斯。 – user951487 2013-05-03 09:29:12

+0

@ user951487這個解決方案的複雜性是'O(N^2)'解決方案,而我的解決方案是'O(N)'。 – 2013-05-03 09:41:28