【问题标题】:How to log and save file with date and timestamp in Python如何在 Python 中记录和保存带有日期和时间戳的文件
【发布时间】:2017-02-04 14:09:50
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

    标签: python csv datetime raspberry-pi


    【解决方案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_write 中取出filename1 并将文件名作为参数传递给该函数。

    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
    

    【讨论】:

    • 感谢输入,write_temp(1)和write_temp(3)的意义是什么?
    • @Dr.Viper - 请检查更新的代码。我刚刚调用了上面的函数来测试一下
    • 好的,现在这对我来说很有意义。此外,不应该是 ¬filename1 = str(arg) + "-" + datetime.now().strftime("%Y-%m-%d-%H-%M-%S")+" 这一行。 csv"¬ 是文件名 =
    • 不需要。 file_name 是函数参数,其中 filename1 是在主块中定义的变量。这两个变量的范围不同。
    • 不。那也是我的错误,接下来我发现我没有将 write_temp(temperature) 更新为 write_temp(temperature,filename1)。现在它使用 filename1 作为文件名的参数。在过去的 30 分钟里,我在 Python 中学到的东西比我在过去两周的尝试中学到的更多。你是个天才。太感谢了。我如何为此给你 100000 点数?
    【解决方案2】:

    试试:

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

    【讨论】:

    • 感谢您的输入,我试过了,但仍然存在每秒获取一个新文件的问题。我正在获取 Log-date 和 time.csv、Log-date 和 1s.csv 之后的时间等......我想记录到 1 个文件,直到记录停止。即使 a 存在,它也没有附加。
    猜你喜欢
    • 2018-02-07
    • 2017-08-06
    • 2020-05-03
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多