簡體   English   中英

在“ while”循環內寫入.csv文件

[英]writing into .csv-file inside of “while”-loop

通過使用

result = open("data/"+ name + "_" + timestamp + ".csv", "w")
result.write("time; data1; data2; data3 \n")`

我打開一個文件,並用列標識符填充它。

運用

while True:
    timestamp = time.strftime("%H:%M:%S", time.localtime())
    data1,data2,data3 = device.fetchData()

    result.write(timestamp +";"+ str(data1) +";"+ str(data1) +";"+ str(data3) +"\n")
    time.sleep(seconds)

.csv文件應填充測量數據。 現在的問題是,如果我在退出腳本后檢查文件,則該文件完全為空 ,甚至沒有列標識符。 但是,如果我使用for循環,它會像應該的那樣工作。

我的理解很奇怪。

我假設您想讓該程序無限期地運行以從某種傳感器收集數據,因此我懷疑問題是來自open()調用的默認緩沖。

首先,您應該幾乎始終使用@Spirine建議的“ with”塊,但是在您的情況下,需要進行一些小的修改:

with open("data/"+ name + "_" + timestamp + ".csv", "w", 1) as result:

末尾的, 1表示行緩沖,這意味着Python將在每行末尾將文件寫入磁盤。 另外,請考慮使用str.format()使它更加優美:

log_line_template = "{ts:%H:%M:%S};{d1};{d2};{d3}\n"
filename = "data/{n}_{ts:%H_%M_%S}.csv".format(n=name, ts=datetime.now())

with open(filename, "w", 1) as result:
    result.write("time; data1; data2; data3 \n")`

    while True:
        data1,data2,data3 = device.fetchData()
        result.write(log_line_template.format(
            ts=datetime.now(), data1, data2, data3
        ))
        time.sleep(seconds)

如果您的文件未正確寫入,那是因為您的程序未正確停止:要退出while循環,該怎么辦? 如果您不想過多修改代碼,則可以使用open上下文管理器:

with open("data/"+ name + "_" + timestamp + ".csv", "w") as result:
    result.write("time; data1; data2; data3 \n")`

    while True:
        timestamp = time.strftime("%H:%M:%S", time.localtime())
        data1,data2,data3 = device.fetchData()

        result.write(timestamp +";"+ str(data1) +";"+ str(data1) +";"+ str(data3) +"\n")
        time.sleep(seconds)

這樣,無論發生什么情況,您的文件都將在程序末尾正確關閉。

暫無
暫無

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

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