使用“with open()as file”方法,如何多次写入?

时间:2016-03-05 18:35:15

标签: python file with-statement file-writing

通常要编写文件,我会执行以下操作:

the_file = open("somefile.txt","wb")
the_file.write("telperion")

但由于某种原因,iPython(Jupyter)不会写文件。这很奇怪,但我能让它发挥作用的唯一方法就是我这样写:

with open('somefile.txt', "wb") as the_file:
    the_file.write("durin's day\n")

with open('somefile.txt', "wb") as the_file:
    the_file.write("legolas\n")

但显然它会重新创建文件对象并重写它。

为什么第一个块中的代码不起作用?我怎么能让第二块工作?

1 个答案:

答案 0 :(得分:6)

w标志表示"打开以写入并截断文件&#34 ;;您可能想要使用a标志打开文件,这意味着"打开文件以附加"。

此外,您似乎正在使用Python 2.您不应该使用b标志,除非您正在编写二进制而不是纯文本内容。在Python 3中,您的代码会产生错误。

因此:

with open('somefile.txt', 'a') as the_file:
    the_file.write("durin's day\n")

with open('somefile.txt', 'a') as the_file:
    the_file.write("legolas\n")

对于使用filehandle = open('file', 'w')未在文件中显示的输入,这是因为文件输出是缓冲的 - 一次只写入一个更大的块。要确保在单元格的末尾刷新文件,可以使用filehandle.flush()作为最后一个语句。