从无限while循环写入CSV

2024-09-28 05:21:45 发布

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

我尝试在while循环中写入CSV文件,如下所示:

import csv

writer = csv.writer(open('rawi.csv', 'a'))

def rawi():
    # some other code

    writer.writerow(row)

def main():
    while True:
        rawi()

if __name__ == "__main__":
    main()

但这只会在我用Ctrl+C中断程序时写入。你知道吗

我查看了这个answer,但是csv.writer没有flush方法。你知道吗

循环运行时如何写入此文件?你知道吗


Tags: 文件csvimportmaindefcodesomeopen
2条回答

多亏了@Chris Doyle@martineau,我这样解决了它:

import csv

def rawi():
    with open('rawi.csv', 'a') as rawi_file:
        writer = csv.writer(rawi_file)
        # the other code 
        writer.writerow(row)

def main():
    while True:
        rawi()

if __name__ == "__main__":
    main()

我们可以看到它是有效的:

rawi.csv

csv writer获取文件对象。因此,您可以先打开一个文件,然后将该文件对象传递给csv writer,而不是在构造函数调用中使用open。这样做的好处是您现在可以访问file对象,因此可以调用它的flush方法。如果您正在使用此方法,则最好打开新行设置为空的文件。你知道吗

import csv
import time
with open('query4.txt','a', newline='') as my_csv_file:
    csv_writter = csv.writer(my_csv_file)
    i = 0
    while True:
        csv_writter.writerow([i])
        my_csv_file.flush()
        i += 1
        time.sleep(1)

每次打开文件都会看到新的结果。你知道吗

输出

0
1
2
3
4
5
6
7
8
9
10
11
12

您也可以通过使用buffering=1打开文件来实现相同的行为。这将设置行缓冲,然后您不必调用文件的flush方法。你知道吗

import csv
import time
csv_writter = csv.writer(open('query4.txt','a', buffering=1, newline=''))
i = 0
while True:
    csv_writter.writerow([i])
    i += 1
    time.sleep(1)

这与在每个writerow之后调用flush具有相同的效果

相关问题 更多 >

    热门问题