2015-04-22 124 views
3

我想完成一門課程,因此需要將一個文本文件充滿關鍵詞放入數組中,當我這樣做時,我得到一個類型錯誤消息:Python數組,嘗試將文本文件放到數組中

TypeError: 'in ' requires string as left operand, not list

這是什麼意思?

這裏是我的代碼:

#!/usr/bin/python 

array = [] 
with open("test.txt", "r") as f: 
    for line in f: 
    array.append(line) 
print array 

searchfile =open('test.txt','r') 
for line in searchfile: 
    if array in line: print line 
searchfile.close() 

編輯:謝謝你的回覆我已經改變,以顯示該行:

searchfile =open('test.txt','r') 
for line in searchfile: 
    if line in array: print line 
searchfile.close() 

除了搜索的工作,我有一個關鍵字的文檔包含簡單的單詞,如'綠色,藍色等'(都在他們自己的路線上),然後我有一個文本,如'我的襯衫是綠色',當我使用此代碼時,它不會找到任何東西,但如果我改變句子只是一個文本它會發現它。我需要它來搜索文檔的關鍵字,然後顯示整條生產線,這是在

回答

3

這意味着你要嘗試檢查一個列表是否是在一個字符串,這條線:

if array in line: 

我的猜測是您試圖檢查線路處於array,使您的in聲明必須扭轉:

if line in array: 

這樣就不會被錯誤的未來感到困惑像這樣,注意inoperator左操作數是操作員左側的任何對象,它是in操作的一部分。從那裏看,如果你看到錯誤所指示的類型,那就很清楚了。

+0

喜三江源的答覆我已經改變顯示的行:在searchfile線路 searchfile =開放(「test.txt的」,「R」) : \t如果在陣列線:打印線 searchfile。 close()搜索工作,除了我有一個關鍵字文件包含簡單的單詞,如'綠色,藍色等'(都在他們自己的線上),然後我有一個文本文件,如'我的襯衫是綠色',當我使用這個代碼它不會找到任何東西,但如果我把這個句子改成一個單詞,它就會找到它。我需要它搜索關鍵字的文檔,然後顯示它所在的整條線。 –

+0

祝您好運!研究空白區域的分隔線,以便可以迭代每個單詞或使用正則表達式模塊。 – miradulo

-1
#!/usr/bin/python 

array = [] 
with open("test.txt", "r") as f: 
    for line in f: 
    array.append(line) 
print array 

searchfile =open('test.txt','r') 
for line in searchfile: 
    if line in array: print line 
searchfile.close() 

現在應該工作。

if line in array: 

是改變的線,現在搜索在array用於相對於檢查,如果該陣列是在線路(其它不會是)的line

編輯: 忘記了這一點...... 這個錯誤是因爲你正在尋找一個列表的字符串,這將導致錯誤的列表不能包含在一個字符串。當操作應用於錯誤類型時引發TypeError's。這個錯誤是python告訴你你不能爲一個列表搜索一個字符串。

EDIT 2 在respose您的編輯,你需要用空格" "到該文件的行拆分,然後遍歷這一點。

array = [] 
with open("words.txt", "r") as f: 
    for line in f: 
     array.append(line) 
     print array 

searchfile =open('sent.txt','r') 
for line in searchfile: 
    sLine = line.split(" ") 
    for word in sLine: 
     if word in array: 
      print line 
searchfile.close() 

現在,這在文件中的每一行進行迭代,然後分割並保存線作爲新的列表 - sLine。然後根據array檢查此列表中的每個項目。

然而,有這個錯誤,如果你正在尋找的字是不是在它不會被發現,線的末端,因爲在array每個項目包含一個\n,但有些searchfile可能不會。

array = [] 
with open("words.txt", "r") as f: 
    for line in f: 
    line = line.rstrip("\n") 
    array.append(line) 
print array 

searchfile =open('sent.txt','r') 
for line in searchfile: 
    sLine = line.split(" ") 
    for word in sLine: 
     word = word.rstrip("\n") 
     if word in array: 
      print line, 
searchfile.close() 

即使將它嵌入句子中,現在也會找到該單詞。

例如

陣列 - 貓

searchfile - 貓坐在墊子上

貓現在發現即使是在句子。

打印結束時的逗號應該停止打印出每行之間的一條線。

+0

爲什麼添加幾乎相同的答案? – miradulo

+0

檢查編輯爲信息有關TypeErrors – EpsilonX

+0

喜三江源的答覆我已經改變顯示的行:在searchfile searchfile =開放(「test.txt的」,「R」) 爲行: \t如果在陣列線:print line searchfile.close()搜索工作除了我有一個關鍵字文件包含像'綠色,藍色等'的簡單單詞(都在他們自己的線上),然後我有一個文本文件,如'我的襯衫是綠色的'當我使用這段代碼時,它不會找到任何東西,但如果我將它改爲只是一個單詞,它就會找到它。我需要它搜索關鍵字的文檔,然後顯示它所在的整條線。 –