Сохраняйте вывод последовательных данных в почасовые файлы python - PullRequest
0 голосов
/ 04 июня 2019

У меня есть скрипт Python, работающий на Raspberry Pi 3B +, который считывает данные с барометра, подключенного к последовательному порту.Скрипт работает хорошо и собирает данные 10 Гц с барометра (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])])

Я бы хотел, чтобы скрипт генерировал новое имя файла каждый час вместо постоянно растущей ситуации с одним файлом, которая у меня сейчас есть.Как мне этого добиться?

1 Ответ

1 голос
/ 04 июня 2019

У меня нет вашего аппаратного обеспечения, поэтому вы прокомментировали части кода, относящиеся к нему, в приведенном ниже коде с помощью ##. В нем показано, как реализовать то, что я предложил в комментарии, а именно: создать выходное имя файла, запустить цикл захвата данных в течение часа, затем промыть и повторить.

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])])
...