我有一个简单的脚本,可以从一个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
答案 0 :(得分:2)
我认为您想看看buffering选项-这是控制Python刷新到文件的频率的原因。
专门设置open('name','wb',buffering=0)
会将缓冲减少到最小,但是也许您想将其设置为其他有意义的东西。
buffering是用于设置缓冲策略的可选整数。 传递0以关闭缓冲(仅在二进制模式下允许),传递1至 选择行缓冲(仅在文本模式下可用),并且整数> 1 指示固定大小的块缓冲区的大小(以字节为单位)。当没有 给定buffering参数,默认的缓冲策略为 如下:
- 二进制文件以固定大小的块缓冲;使用试探法来确定缓冲区的大小来选择缓冲区的大小 设备的“块大小”,然后返回io.DEFAULT_BUFFER_SIZE。上 在许多系统中,缓冲区的长度通常为4096或8192字节。
- “交互式”文本文件(isatty()返回True的文件)使用行缓冲。其他文本文件使用上述策略 用于二进制文件。