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()
text
是 str
因为那是 .read()
returns。它没有关闭方法。一个文件对象会有一个 close 方法,但你没有为你打开的文件分配一个名称,因此你不能再引用它来关闭它。
我推荐使用with
语句来管理文件:
with open("catinhat.txt") as f:
text = f.read()
...
无论块是否成功完成或引发异常,with
语句都将关闭文件。
我正在分析文本的词频,完成后收到此错误消息:
'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()
text
是 str
因为那是 .read()
returns。它没有关闭方法。一个文件对象会有一个 close 方法,但你没有为你打开的文件分配一个名称,因此你不能再引用它来关闭它。
我推荐使用with
语句来管理文件:
with open("catinhat.txt") as f:
text = f.read()
...
无论块是否成功完成或引发异常,with
语句都将关闭文件。