2016-09-27 49 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个文件,直到日志记录停止。即使在那里,它不是附加的。 –

相关问题