簡體   English   中英

將前 10 個數字寫入 txt 文件,然后使用新值更新 ( python )

[英]Writing the first 10 numbers in a txt file and then updating with the new values ( python )

我對 python 很陌生,我正在嘗試 plot 圖表。 我有一個 print() 將我的電池電壓的 output 打印到一個名為“output.txt”的 txt 文件中。

Python 腳本

 f = open("C:\Scripts\output.txt", "w")

   print("{0:.1f} V".format(voltage/10.0),file=f) #battery voltage

  f.close()

現在,每次運行腳本時,這些值都會在 txt 文件的第一行中不斷更新。 我知道它的發生,因為我使用“w”。

有沒有辦法我可以寫入前 10 個值,然后通過刪除舊值的 rest 從頂部開始更新第 11 個值。 任何幫助表示贊賞。 非常感謝您的時間!!

由於請求編輯文件意味着您正在請求操作系統讀取/寫入文件的權限,因此通常對於如此少量的值,一次簡單地重寫所有值是最簡單的。 例如,

def update_file(values):
    with open("C:\Scripts\output.txt", "w") as f:
        for v in values:
            f.write("{0:.1f} V".format(v/10.0))

values = [0]*10
update_file(values)
new_voltage = 11.0
values.pop(0)
values.append(new_voltage)
update_file(values)

讀取文件,丟棄第一個值,添加你的值並覆蓋文件。

只是一個想法,在收集數據時將數據存儲在一個列表中可能會更容易,然后在完成收集數據后只寫入最后 10 個數據點。

這是一個例子:

import time

def write_data(file_name, data):
    with open(file_name, 'w') as f:
        for voltage in data:
            f.write("{0:.1f} V".format(voltage/10.0))
            f.write('\n')

if __name__ == "__main__":
    FILE = "C:\Scripts\output.txt"
    N = 10 # maximum number of lines
    data = [0] * N
    for i in range(50): # 50 or however many data points you want to gather
        voltage = 10.15 # Some function that get's the current voltage
        data[i%N] = voltage # 15 % 10 = 5 so we just write over the 6th line when writing the 16th data point.
        time.sleep(1) # however many seconds you want between data points
    
    # Then once you're finished collecting data, go ahead and write it permanently once.
    write_data(FILE, data)

在收集數據時,您仍然可以訪問列表data中的數據。 但是在這里你只需要寫一次“output.txt”。

所以數據看起來像:

[v0, v1, v2, v3, v4, v5, v6, v7, v8, v9] # after the first 10 points have been received
[v10, v11, v12, v3, v4, v5, v6, v7, v8, v9] # after the first 13 points have been received

然后,您可以在完成收集后寫入數據。

暫無
暫無

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

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