将串行数据输出保存到每小时文件 python

Save serial data output to hourly files python

我在 Raspberry Pi 3B+ 上有一个 python 脚本 运行,它正在从连接到串行端口的气压计读取数据。该脚本运行良好并从气压计捕获 10 Hz 数据(每秒 10 行数据)。

我有一个@reboot cron 作业,它会在 Pi 启动时启动脚本。 启动时生成文件名。

import io
import serial
import sys
import time
from time import sleep
from datetime import datetime, timedelta

#serial port
port = "/dev/serial/by-id/usb-FTDI_US232R_FT1TSTRU-if00-port0"

#try to connect to barometer at 9600bps:
ser=serial.Serial(port, 9600, timeout=1, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE,bytesize=serial.EIGHTBITS)

# File storage
SSD_path="/media/pi/USBDRIVE/"
filename=time.strftime('barometer-%Y-%m-%d-%H%M.dat')
path=SSD_path + filename

#write data to file on SSD
ser.write(b'*0100E6\r\n')

with open(path, 'w+') as f:
    while True:
        line = str(ser.readline())
        f.writelines([line.strip(), " t = %s \n " % (datetime.now().strftime("%Y-%m-%d-%H:%M:%S.%f")[:-5])])

我想让脚本每小时生成一个新文件名,而不是我目前遇到的不断增长的单一文件情况。 我怎样才能做到这一点?

我没有你的硬件,所以在下面的代码中用 ## 注释掉了处理它的部分代码。它展示了如何实现我在评论中建议的内容——即生成一个输出文件名,运行 数据捕获循环一个小时,然后冲洗并重复。

import io
import os
import random  # for testing
##import serial
import sys
import time
from time import sleep
from datetime import datetime, timedelta

TIME_INTERVAL = 3600  # Seconds.

#serial port
port = "/dev/serial/by-id/usb-FTDI_US232R_FT1TSTRU-if00-port0"

#try to connect to barometer at 9600bps:
##ser = serial.Serial(port, 9600, timeout=1, parity=serial.PARITY_NONE,
##                    stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)

# File storage
##SSD_path = "/media/pi/USBDRIVE/"
SSD_path = r"C:\vols\Files\PythonLib\Stack Overflow"
#write data to file on SSD
##ser.write(b'*0100E6\r\n')

print('running')
while True:
    filename = time.strftime('barometer-%Y-%m-%d-%H%M%S.dat')
    path = os.path.join(SSD_path, filename)

    with open(path, 'w+') as f:
        start = time.time()
        while (time.time() - start) < TIME_INTERVAL:
##            line = str(ser.readline())
            line = str(random.randint(0, 100))
            time.sleep(.1)
##            f.writelines([line.strip(), " t = %s \n " % (datetime.now().strftime("%Y-%m-%d-%H:%M:%S.%f")[:-5])])
            f.writelines([line.strip(), " t = %s \n " % (datetime.now().strftime("%Y-%m-%d-%H:%M:%S.%f")[:-5])])