【问题标题】:Python Array, trying to place text file into an arrayPython Array,试图将文本文件放入数组中
【发布时间】:2015-06-30 10:48:19
【问题描述】:

我正在尝试完成一项课程作业,因此需要将一个充满关键词的文本文件放入一个数组中,当我这样做时,我收到一条类型错误消息:

TypeError: 'in' 需要字符串作为左操作数,而不是列表

这是什么意思?

这是我的代码:

#!/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() 

搜索有效,除了我有一个关键字文档包含简单的词,如“绿色、蓝色等”(都在自己的行上),然后当我使用此代码时,我有一个包含文本的文档,例如“我的衬衫是绿色的”不会找到任何东西,但如果我将句子更改为一个单词,它会找到它。我需要它在文档中搜索关键字,然后显示它所在的整行。

【问题讨论】:

    标签: python arrays python-2.7 arraylist


    【解决方案1】:

    这意味着您正在尝试检查列表是否在字符串中,使用以下行:

    if array in line:
    

    我的猜测是您正在尝试检查该行是否在 array 中,因此您的 in 语句必须颠倒:

    if line in array:
    

    为了让您以后不会被此类错误弄糊涂,请注意inoperatorleft 操作数 是运算符左侧的任何对象,它是in 操作的一部分。从那里开始,如果您查看错误所指示的类型,就很清楚了。

    【讨论】:

    • 嗨,谢谢您的回复,我已将行更改为显示:searchfile =open('test.txt','r') for line in searchfile: if line in array: print line searchfile。关闭()搜索工作,除了我有一个关键字文档包含简单的单词,如“绿色,蓝色等”(都在他们自己的行上)然后当我使用此代码时,我有一个带有文本的文档,例如“我的衬衫是绿色的”不会找到任何东西,但如果我将句子更改为一个单词,它会找到它。我需要它在文档中搜索关键字,然后显示它所在的整行。
    • 祝你好运!查看空格上的分割线,以便您可以遍历每个单词,或使用正则表达式模块。
    【解决方案2】:
    #!/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 告诉你不能在字符串中搜索列表。

    编辑 2 为了响应您的编辑,您需要用空格 " " 分割文件的行,然后对其进行迭代。

    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,但@987654332 中的一些项目@ 可能不会。

    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 - 猫坐在垫子上

    现在可以找到猫,即使它在句子中。

    打印结束时的逗号应该不会在您打印出来的每一行之间出现一行。

    【讨论】:

    • 为什么要添加几乎相同的答案?
    • 嗨,谢谢您的回复,我已将行更改为显示:searchfile =open('test.txt','r') for line in searchfile: if line in array: print line searchfile。关闭()搜索工作,除了我有一个关键字文档包含简单的单词,如“绿色,蓝色等”(都在他们自己的行上)然后当我使用此代码时,我有一个带有文本的文档,例如“我的衬衫是绿色的”不会找到任何东西,但如果我将句子更改为一个单词,它会找到它。我需要它在文档中搜索关键字,然后显示它所在的整行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2015-07-05
    相关资源
    最近更新 更多