什么时候更新文件?

时间:2017-07-06 15:51:23

标签: python json

我有一组代码在无限循环中运行,通过终端用控件C取消。在这段代码中我使用代码json.dumps(dictionary,outfile)

我注意到在我使用控件C终止进程之前,实际上并没有将数据放入文件中。为什么在程序终止之前文件才会更新?

1 个答案:

答案 0 :(得分:1)

Anthony Rossi基本上是正确的,您需要使用outfile.flush()刷新数据。但为什么会这样呢?

json.dump需要" .write() - 支持类似文件的对象",请参阅here。在代码的某处,您使用open来获取outfile。如果我们查看open的文档,我们可以阅读以下内容:

  

buffering是一个可选的整数,用于设置缓冲策略。传递0以切换缓冲关闭(仅允许在二进制模式下),1选择行缓冲(仅在文本模式下可用),以及整数> 1表示固定大小的块缓冲区的大小(以字节为单位)。如果没有给出缓冲参数,则默认缓冲策略的工作方式如下:

     
      
  • 二进制文件以固定大小的块缓冲;使用启发式方法选择缓冲区的大小,尝试确定底层设备的“块大小”并回退到io.DEFAULT_BUFFER_SIZE。在许多系统上,缓冲区的长度通常为4096或8192字节。

  •   
  • “交互式”文本文件(isatty()返回True的文件)使用行缓冲。其他文本文件使用上述策略用于二进制文件。

  •   

我猜您还没有指定buffering参数,而且您的数据小于4/8 kb。因此,写入被缓冲而不是直接写入文件。

当您使用Ctrl+C终止程序时,outfile将关闭,并将数据刷新到您的文件中。

要解决此问题,只需将outfile.flush()放在json.dump()之后,就像Anthony Rossi建议的那样。

相关问题