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

Posted

技术标签:

【中文标题】使用“with open() as file”方法,如何多次写入? [复制]【英文标题】:Using "with open() as file" method, how to write more than once? [duplicate] 【发布时间】:2016-06-19 11:47:20 【问题描述】:

通常要写一个文件,我会这样做:

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")

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

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

【问题讨论】:

"w" 模式打开文件会删除文件中的所有数据(如果存在)。 试试:the_file = open("somefile.txt", "wb", buffering=False). 让我们回到你原来的写作。您的写入被缓冲,直到您写入数据块或关闭文件。所以你可能还看不到磁盘上的数据。 【参考方案1】:

w 标志表示“打开以写入并截断文件”;您可能希望使用 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() 作为最后一条语句。

【讨论】:

我想让我感到困惑的部分是我将这个文件对象传递给不同的函数,所以我将它声明为一个变量。如果我创建带有var = open("file","w") 的文件,那么以后如何附加到该变量? @O.rka:关于文件中的缓冲:with 语句创建一个上下文管理器,负责在最后调用the_file.close(),从而将文件刷新到磁盘。如果您退出 Jupyter 进程,文件应该会出现。

以上是关于使用“with open() as file”方法,如何多次写入? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Docker的基本使用方法

Java集合使用之next方法与remove方法 | Java集合使用之remove方法使用易错

构造方法的使用

Python 装饰器使用静态方法。但使用 2 个静态方法失败。为啥?

安装使用方法的索引

求教,的使用方法有哪些?