Python Array,试图将文本文件放入数组中

Posted

技术标签:

【中文标题】Python Array,试图将文本文件放入数组中【英文标题】:Python Array, trying to place text file into an 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() 

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

【问题讨论】:

【参考方案1】:

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

if array in line:

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

if line in array:

为了让您以后不会被此类错误弄糊涂,请注意in 是operator。 left 操作数 是运算符左侧的任何对象,它是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。关闭()搜索工作,除了我有一个关键字文档包含简单的单词,如“绿色,蓝色等”(都在他们自己的行上)然后当我使用此代码时,我有一个带有文本的文档,例如“我的衬衫是绿色的”不会找到任何东西,但如果我将句子更改为一个单词,它会找到它。我需要它在文档中搜索关键字,然后显示它所在的整行。

以上是关于Python Array,试图将文本文件放入数组中的主要内容,如果未能解决你的问题,请参考以下文章

拆分一个字符串并将其放入两个数组中

将文本文件的内容存储在数组中[重复]

将目录中的图像文件放入数组

将文件名推送到数组,然后将它们写入文本文件

怎么将python中的数组全部打印出来array

使用数组填充 APEX 表单上的文本字段