簡體   English   中英

從無限 while 循環寫入 CSV

[英]Writing to CSV from an infinite while loop

我正在嘗試在 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中斷程序時才寫入。

我看了這個答案,但csv.writer沒有flush方法。

循環運行時如何寫入此文件?

csv 寫入器獲取文件 object。 因此,您可以先打開一個文件,然后將該文件 object 傳遞給 csv 編寫器,而不是在構造函數調用中使用 open 。 這樣做的好處是您現在可以訪問文件 object,因此可以調用它的 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)

每次我打開文件我都會看到新的結果。

OUTPUT

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

您也可以通過使用buffering=1打開文件來實現相同的行為,這將設置行緩沖,然后您不必調用文件的刷新方法。

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 的效果相同

感謝@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM