下面是我编写的脚本的一部分,它将列表中的每个项目传递给函数,将函数的输出存储为变量,最后使用换行符,然后将变量写入新的在文件中的行。它还将变量打印到控制台。
for i in lane_list:
out = count_genes(count, i, reader, total_genes) + '\n'
count += 1
outfile.write(out)
print out
脚本有效,但不符合我的预期。我可以看到输出在脚本运行时打印到控制台,所以我知道脚本在for循环中运行的速率,我认为python会以与打印输出到控制台相同的速率写入文件。奇怪的是,长时间没有任何东西会被写入文件(我可以通过在控制台中“控制”文件来看到这个,因为脚本正在运行),然后文件中会再出现几百行。这就好像python在一段时间内存储它要写入文件的内容,然后一次性写入所有内容。甚至更令人惊讶的是,当我捕获文件时,因为运行它的脚本将写入最后一行的一半但不是全部。
任何人都可以向我解释为什么会这样吗?
答案 0 :(得分:1)
正如@szymon所提到的,文件在写入时会被缓冲。如果您希望看到它被写入'直播,请使用open('/path/to/file'', 'w', 0)
0 means unbuffered。
对于python3,使用1作为缓冲的行,因为只有二进制数据才允许缓冲。