2016-09-27 81 views
2

我想從使用Raspberry Pi 3的DS18B20傳感器通過從shell執行的Python代碼記錄溫度。如何在Python中使用日期和時間戳記錄和保存文件

我想用時間戳記錄溫度,然後保存文件。

我目前正在做的是將它保存到代碼中輸入的文件名,但我想用文件名中的日期和時間戳記錄文件。

案例1:當我在代碼中放置一個文件名時,我可以反覆追加數據到同一個文件,但是我無法在不編輯代碼的情況下開始新的單獨記錄。

#Writes data to file 
def write_temp(temperature): 
     with open("/home/pi/temp.csv", "a") as log: 
       log.write("{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),str(temperature))) 

問題是該文件始終是temp.csv,每次都會附加數據。

案例2:我試圖從時間戳得到文件名,但每秒鐘都會產生一個新文件。

def write_temp(temperature): 
     filename1 = strftime("%Y-%m-%d %H:%M:%S") 
     #filename1 = sys.argv[1] 
     with open('%s.csv' % filename1, 'a') as log: 
       log.write("{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),str(temperature))) 

在上述情況下,我寧願希望有文件名設置在每個時間記錄的開始或在日誌記錄的末尾。我還想將名稱保存爲Log-DateTime而不僅僅是DateTime。我通過做('"Log-" + %s.csv' % filename1, 'a')而不是('%s.csv' % filename1, 'a')來試試這個,但是沒有成功。

理想情況:我想文件名是字處理日期時間,在WORD被作爲命令行參數,如下:

sudo python TTLogging.py WORD 

你能指出我哪裏我錯了嗎?如果需要,我可以分享我的工作的完整代碼,因爲這是一個學習練習。

回答

1

案例2,每次write_temp被調用時,它被填充filename1時間戳。

因此,考慮一下,例如,你在10:15:13 (hh:mm:ss)處叫它,然後filename1將是10-15-13.csv。當您將在10:15:14處再次呼叫時,則filename1將爲10-15-14.csv

這就是爲什麼新文件正在創建。

解決方案:取出從temp_writefilename1並通過文件名給這個函數作爲參數。

from datetime import * 
import sys 

def write_temp(temperature,file_name): 

     print ("In write_temp function - "+file_name) 

     with open(file_name, 'a') as log: 
       log.write("{0},{1}\n".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"),str(temperature))) 


arg = sys.argv[1] 
filename1 = str(arg) + "-" + datetime.now().strftime("%Y-%m-%d-%H-%M-%S")+".csv" 
print ("File name is "+filename1) 
write_temp(1,filename1) 

輸出上控制檯:

C:\Users\dinesh_pundkar\Desktop>python c.py LOG 
File name is LOG-2016-09-27-11-03-16.csv 
In write_temp function - LOG-2016-09-27-11-03-16.csv 

C:\Users\dinesh_pundkar\Desktop> 

LOG時間戳的輸出。CSV:

2016-09-27 10:47:06,1 
2016-09-27 10:47:06,3 
+0

謝謝輸入,write_temp(1)和write_temp(3)的意義是什麼? –

+0

@ Dr.Viper - 請檢查更新的代碼。我剛剛調用上述函數來測試它 –

+0

好的,現在對我來說很有意義。此外,不應該¬filename1= str(arg)+「 - 」+ datetime.now()。strftime(「%Y-%m-%d-%H-%M-%S」)+「。 csv「¬是file_name = –

2

嘗試:

with open('Log-%s.csv' % filename1, 'a') as log: 
+0

感謝您的輸入,我試過了,得到一個新的文件記錄的每一秒的問題仍然存在。我得到日誌日期和time.csv,1s.csv後的日誌日期和時間等..... 我想記錄到1個文件,直到日誌記錄停止。即使在那裏,它不是附加的。 –

相關問題