使用Flask将数据写入文件

4

我在我的Flask开发服务器(Win7)中写入数据到文件时遇到了问题。

 @app.route('/')
 def main():

    fo = open("test.txt","wb")
    fo.write("This is Test Data")

 return render_template('index.html')

为什么这个在Flask中不起作用?

1
在写入后添加一个 fo.flush() 行。 - Ashwini Chaudhary
我会在结尾处添加fo.close(),以防万一。 - MouIdri
3个回答

16

如果数据仍然存在于I/O缓冲区中,您应该将输出flush到文件或close文件。

更好的方法是使用with语句,它会自动为您关闭文件。

with open("test.txt", "w") as fo:
   fo.write("This is Test Data")

虽然这是一个好建议,但我没有让它起作用。 "wb"标志表示期望二进制数据而不是字符串,但在fo.write中发送了一个字符串,导致以下错误: TypeError:需要类似字节的对象,而不是'str'。 我建议将"wb"更改为"w"以便将字符串写入文件。 - Helena
2
@Helena 这个答案是来自 Python 2 时代,当时 str/bytes 是相同的类型,而 unicode 则是一个独立的类型。现在已经更新,将 wb 替换为 w - Ashwini Chaudhary

1

@Ashwini的回答可能是正确的,但我想指出,如果您正在写入文件以获得日志文件,则应使用Flask对日志记录的支持。这基于Python的logging模块,非常灵活。文档在这里


1
@app.route('/')
def main():
    fo= open("test.txt", "w")
    filebuffer = ["brave new world"]
    fo.writelines(filebuffer)
    fo.close()
    return render_template('index.html')

为什么这应该回答 OP 的问题? - executable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接