Python何时真正写入文件?

问题描述

我有一个python脚本,用于收集用户输入并将其写入文件。 基本结构是代码遍历图像列表,向用户显示每个图像,通过输入提示用户,并通过循环记录每次迭代的用户输入。循环中的写入非常重要,因为文件列表可以运行成千上万,并且我不想由于错误或断电等原因而不得不重新启动。

代码分类,相关部分是:

f=open(outfile,a,newline='')
for i in range(0,numFiles):
    folder = sheet.cell_value(i,22) #get image location from a spreadsheet
    Assess = sheet.cell_value(i,23) #get the current assessment from the spreadsheet
    if len(Assess)==0: #no existing assessment
       impath=os.path.join(folder,'image.png')
       <plt calls to show figure>
       while len(Assess)==0:
           Assess=input('Enter Assessment for row %d:' % i)
       <close figure>
    f.write('%s,'%s\n' % (folder,Assess.upper())) 
f.close()

电子表格已经具有前70行的数据,因此我第一次获得输入查询的时间是i = 71。我通过对input行的多次调用来运行此命令,但是当我在记事本中打开文件时(代码仍在运行时),我只看到71个值,这些值是在不执行之后发生写入的结果输入if len(Assess)==0:。我可以在文件中看到手动输入的唯一方法关闭文件

为什么文件写入将Assess=input()Assess=sheet.cell_value()区别对待?

除了在for循环内移动文件的打开和关闭之外,是否有办法让它在每次迭代之后都可以写?

解决方法

这是由于未发生冲洗。根据需要使用flush()进行书写。另外,with构造可以在处理文件时为您提供帮助:

   with open(..) as f:
       f.write...
   
   ... when you leave the with block your file is written and closed for you