[英]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()
我們可以看到它有效:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.