Python 为什么在使用函数后读取文件不起作用?

Python 为什么在使用函数后读取文件不起作用?,python,Python,我的代码应该查找文本中出现的单词。出于某种原因,在使用此函数后,将从该特定文本中读取方法(对于.readlines()方法为空列表,对于.read()则为空)。代码是: def counter(new): words = dict() lines=new.readlines() for line in lines: text=line.split() for word in text: if word not in

我的代码应该查找文本中出现的单词。出于某种原因,在使用此函数后,将从该特定文本中读取方法(对于.readlines()方法为空列表,对于.read()则为空)。代码是:

def counter(new):
    words = dict()
    lines=new.readlines()
    for line in lines:
        text=line.split()
        for word in text:
            if word not in words:
                words[word]=1
            else: words[word]+=1
    return [tuple(x) for x in words.items()]

我没有发现任何可能导致这种情况的错误。

我假设
new
是调用
open(…)
的结果,它应该是传递到函数中的文件句柄。调用
readlines()
会耗尽它,因此尝试使用相同的句柄从文件中读取将不起作用。打开一个新句柄,或者您可以调用
new.seek(0)
(比打开一个全新的句柄更好的选择-尽管在某些情况下会再次返回相同的句柄,但我们不要在这里深入讨论),以将索引移到文件的开头。

“不起作用”不是一个非常描述性的问题描述。请澄清。提供一个其他人可以看到的函数。如果您希望在调用该函数后从
new
读取,那么您就不走运了,因为您已经阅读了全部内容。如果出于某种原因想再次阅读,则需要使用
.seek
方法“倒带”它。请显示不符合预期的代码(请说明您预期的内容及其行为方式)。这段代码在被调用之前不会做任何事情,然后它做什么取决于参数是什么。如果没有更多的信息,什么东西不起作用是绝对不可能知道的。@PM2Ring或者更理智地说,只需打开一个新文件-object@juanpa.arrivillaga
.seek
比关闭并重新打开文件便宜得多。现在我明白我的错误了。非常感谢。顺便说一句,我不会使用
lines=new.readlines()
后跟
作为行中的行:
。只需对new中的行使用
@Matthias表示同意——存储到列表中不会有太多好处,最好只是对其进行迭代。另外,如果你仔细想想,一遍又一遍地重读文件行也没有多大意义(把它存储在一个更好的地方);但也许OP还有其他要求。