为什么没有文件输出?

苏联拉塔

为什么“文件对象”中没有内容?

尝试更改为 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章