2015-04-22 42 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()搜索工作除了我有一个关键字文件包含像'绿色,蓝色等'的简单单词(都在他们自己的线上),然后我有一个文本文件,如'我的衬衫是绿色的'当我使用这段代码时,它不会找到任何东西,但如果我将它改为只是一个单词,它就会找到它。我需要它搜索关键字的文档,然后显示它所在的整条线。 –