Python的文件缓冲区没有用块刷新?

2024-03-29 10:08:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个大的csv文件,我按顺序打开处理每一行,然后将结果写入一个csv文件,我的代码如下(我在Debian 9btw上使用python3.5):

with open("coutput.csv", "w") as outf:
    ## csv_file_names is a list of csv files' paths
    for file_name in csv_file_names:
        with open(file_name) as inf:
            for line in inf:
                ## processing the line's data
                ....
                ## processed data is then stored in processed_line(as an str object)
                outf.write(processed_line)

问题是,在上一次迭代中,processed_line似乎没有被写入output.csv;换言之,output.csv的行数少于它应该拥有的行数(大约最后10行没有被写入)。当我通过在第一个outf.flush的末尾添加outf.flush来修改代码时,每件事情都可以正常工作(没有遗漏行)。在

^{pr2}$

所以我要问,flush应该一直用在(文件)上下文管理器的末尾吗?在


Tags: 文件csv代码infornamesisas
1条回答
网友
1楼 · 发布于 2024-03-29 10:08:04

这是关于离开with的嵌套部分。 当with结束时,缓冲区将被清除,文件将关闭:

with open("coutput.csv", "w") as outf:
    outf.write('something')
    outf.write('something more')

    print(1)
    # still in buffer
print(2)
# now its flushed
  • print(1)位于with>;文件仍处于打开状态且未刷新
  • print(2)with>;文件现在被刷新并关闭

相关问题 更多 >