在脚本执行期间将值写入csv

时间:2018-11-12 06:54:10

标签: python

我有一个简单的脚本,可以从一个csv读取值,对它们运行一些内部函数,每次需要2-3秒,然后将结果写入另一个csv文件。

这里是它的样子,减去了我引用的内部函数。

import csv
import time

pause = 3

with open('input.csv', mode='r') as input_file, \
     open('output.csv', mode='w') as output_file:
    input_reader = csv.DictReader(input_file)
    output_writer = csv.writer(output_file, delimiter=',', quotechar='"',
                               quoting=csv.QUOTE_MINIMAL)
    count = 1
    for row in input_reader:
        row['new_value'] = "result from function that takes time"
        output_writer.writerow( row.values() )
        print( 'Processed row: ' + str( count ) )
        count = count + 1
        time.sleep(pause)

我面临的问题是output.csv文件在执行完所有操作之前仍然为空白。

在运行此长脚本时,我想在其他地方访问和使用该文件。

有没有办法防止将值写入output.csv的延迟?

编辑:这是上面脚本的虚拟csv文件:

value
43t34t34t
4r245r243
2q352q352
gergmergre
435q345q35

1 个答案:

答案 0 :(得分:2)

我认为您想看看buffering选项-这是控制Python刷新到文件的频率的原因。

专门设置open('name','wb',buffering=0)会将缓冲减少到最小,但是也许您想将其设置为其他有意义的东西。

  

buffering是用于设置缓冲策略的可选整数。   传递0以关闭缓冲(仅在二进制模式下允许),传递1至   选择行缓冲(仅在文本模式下可用),并且整数> 1   指示固定大小的块缓冲区的大小(以字节为单位)。当没有   给定buffering参数,默认的缓冲策略为   如下:

     
      
  • 二进制文件以固定大小的块缓冲;使用试探法来确定缓冲区的大小来选择缓冲区的大小   设备的“块大小”,然后返回io.DEFAULT_BUFFER_SIZE。上   在许多系统中,缓冲区的长度通常为4096或8192字节。
  •   
  • “交互式”文本文件(isatty()返回True的文件)使用行缓冲。其他文本文件使用上述策略   用于二进制文件。
  •   

另请参见How often does python flush to a file?