如何在Python中记录和保存带有日期和时间戳的文件

时间:2016-09-27 04:58:48

标签: python csv datetime raspberry-pi

我正尝试使用Raspberry Pi 3通过从shell执行的Python代码从DS18B20传感器记录温度。

我想用时间戳记录温度,然后保存文件。

我目前正在做的是将其保存到代码中输入的文件名,但我想用文件名中的日期和时间戳记录该文件。

案例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- DateTime ,其中WORD从命令行作为参数发送,如下所示:

sudo python TTLogging.py WORD

你能指出我哪里出错吗?如果需要,我可以分享我的工作的完整代码,因为这是一个学习练习。

2 个答案:

答案 0 :(得分:2)

尝试:

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

答案 1 :(得分:1)

案例2 中,每次调用write_temp时,都会使用时间戳填充filename1

例如,考虑一下,您是在10:15:13 (hh:mm:ss)调用它,然后filename1将是10-15-13.csv。当您在10:15:14再次致电时,filename110-15-14.csv

这就是创建新文件的原因。

解决方案:filename1取出temp_write并将文件名作为参数传递给该函数。

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-TimeStamp.csv的输出:

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