为什么“文件对象”中没有内容?
尝试更改为 append 并且自第二次运行以来就有内容。我在这里缺少什么?
代码如下:
import random
from io import StringIO
class WriteMyStuff(object):
def __init__(self, writer):
self.writer = writer
def write(self):
write_text = "this is a silly message\n"
self.writer.write(write_text)
fh = open('test.txt', 'w')
w1 = WriteMyStuff(fh)
w1.write()
fh.close
sioh = StringIO()
w2 = WriteMyStuff(sioh)
w2.write()
print("file object: ", open('test.txt', 'r').read())
print("StringIO object:", sioh.getvalue())
谢谢!
发生这种情况是因为您忘记close
在第 17 行正确调用该方法。您将其称为需要使用括号调用的属性.close()
。这是固定版本:
import random
from io import StringIO
class WriteMyStuff(object):
def __init__(self, writer):
self.writer = writer
def write(self):
write_text = "this is a silly message\n"
self.writer.write(write_text)
fh = open("test.txt", "w")
w1 = WriteMyStuff(fh)
w1.write()
fh.close()
sioh = StringIO()
w2 = WriteMyStuff(sioh)
w2.write()
print("file object: ", open("test.txt", "r").read())
print("StringIO object:", sioh.getvalue())
这将打印出:
file object: this is a silly message
StringIO object: this is a silly message
这段代码仍然有一个微妙的错误,它没有关闭最后一行之前的行中的第二个文件处理程序对象。
您可以使用contextmanages
,如果你不想处理手动关闭文件句柄。考虑这个例子:
import random
from io import StringIO
class WriteMyStuff(object):
def __init__(self, writer):
self.writer = writer
def write(self):
write_text = "this is a silly message\n"
self.writer.write(write_text)
with open("test.txt", "w") as fh:
w1 = WriteMyStuff(fh)
w1.write()
sioh = StringIO()
w2 = WriteMyStuff(sioh)
w2.write()
with open("test.txt", "r") as f:
print("file object: ", f.read())
print("StringIO object:", sioh.getvalue())
该with
块负责在您超出范围后关闭文件处理程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句