str 对象没有属性 'close'

str object has no attribute 'close'

我正在分析文本的词频,完成后收到此错误消息:

'str' object has no attribute 'close'

我以前用过close()方法,所以我不知道该怎么做。

代码如下:

def main():
    text=open("catinhat.txt").read()
    text=text.lower()
    for ch in '!"$%&()*+,-./:;<=>=?@[\]^_{|}~':
        text=text.replace(ch,"")
    words=text.split()
    d={}
    count=0
    for w in words:
        count+=1
        d[w]=d.get(w,0)+1

    d["#"]=count
    print(d)
    text.close()
main()

那是因为您的 variable 文本具有字符串类型(因为您正在从文件中读取比赛)。

让我给你看一个确切的例子:

>>> t = open("test.txt").read()
#t contains now 'asdfasdfasdfEND' <- content of test.txt file
>>> type(t)
<class 'str'>

>>> t.close()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'close'

如果你对open()函数使用辅助变量(其中returns一个_io.TextIOWrapper),你可以关闭它:

>>> f = open("test.txt")
>>> t = f.read() # t contains the text from test.txt and f is still a _io.TextIOWrapper, which has a close() method
>>> type(f)
<class '_io.TextIOWrapper'>
>>> f.close() # therefore I can close it here
>>>

您没有保存对文件句柄的引用。您打开了文件,读取了它的内容,并保存了结果字符串。没有要关闭的文件句柄。避免这种情况的最佳方法是使用 with 上下文管理器:

def main():
    with open("catinhat.txt") as f:
        text=f.read()
        ...

这将在 with 块结束后自动关闭文件,无需显式 f.close()

text=open("catinhat.txt").read()

textstr 因为那是 .read() returns。它没有关闭方法。一个文件对象会有一个 close 方法,但你没有为你打开的文件分配一个名称,因此你不能再引用它来关闭它。

我推荐使用with语句来管理文件:

with open("catinhat.txt") as f:
    text = f.read()
    ...

无论块是否成功完成或引发异常,with 语句都将关闭文件。