Python 有没有办法在新的文本文件中每隔5秒钟存储一次数据?

Python 有没有办法在新的文本文件中每隔5秒钟存储一次数据?,python,datetime,time,python-datetime,Python,Datetime,Time,Python Datetime,我创建了一个读取传感器数据的程序。根据我的用例,我必须每隔5秒用新的文件名将读数存储在文本文件中,例如:file1、file2、file3等等,直到我使用键盘停止程序。有人能指导我完成这项任务吗 import sys import time import board import digitalio import busio import csv import adafruit_lis3dh from datetime import datetime, timezone i2c = busio.

我创建了一个读取传感器数据的程序。根据我的用例,我必须每隔5秒用新的文件名将读数存储在文本文件中,例如:file1、file2、file3等等,直到我使用键盘停止程序。有人能指导我完成这项任务吗

import sys
import time
import board
import digitalio
import busio
import csv
import adafruit_lis3dh
from datetime import datetime, timezone
i2c = busio.I2C(board.SCL, board.SDA)
int1 = digitalio.DigitalInOut(board.D6)  # Set this to the correct pin for the interrupt!
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, int1=int1)
lis3dh.range = adafruit_lis3dh.RANGE_2_G



with open("/media/pi/D427-7B2E/test.txt", 'w') as f:
  sys.stdout = f


  while True:
      ti = int(datetime.now(tz=timezone.utc).timestamp() * 1000)
      x, y, z = lis3dh.acceleration
      print('{}, {}, {}, {}'.format(ti,x / 9.806, y / 9.806, z / 9.806))
      time.sleep(0.001)
      pass
你能试试记录吗? 看看TimedRotatingFileHandler,这可能会有所帮助

您可以将threading.Timer视为递归,并根据需要设置Timer,并在程序开始时调用该函数吗?您可以更新array/dict中的文件名,使其反映到程序的其余部分,也可以将数组的内容写入文件并清空数组

     def write_it():
        threading.Timer(300, write_it).start()

     write_it()

我使用RotatingFileHandler解决了这个问题,这是一个python日志类。我们的作用域从5秒变为1小时,所以我运行程序1小时,得到一个135 mb的文件,我将其转换为字节,并在maxBytes参数中使用这些字节。因此,在这段代码中现在发生的是,一旦文件大小达到代码中提到的字节,它就会创建另一个文件,并开始在其中存储值,然后继续对5个文件执行相同的操作。我希望这对其他拥有类似用例的人有所帮助

logger = logging.getLogger("Rotating Log")
logger.setLevel(logging.INFO)

  handler = RotatingFileHandler('/home/pi/VibrationSensor/test.txt', maxBytes=20, backupCount=5)
  logger.addHandler(handler)

  while True:
    ti = int(datetime.now(tz=timezone.utc).timestamp() * 1000)
    x, y, z = lis3dh.acceleration
    logger.info('{}, {}, {}, {}'.format(ti,x / 9.806, y / 9.806, z / 9.806))
    time.sleep(0.001)
    pass

由于
循环在
0.001
秒处于休眠状态,因此您当然可以编写一个计数器来跟踪它运行的次数,因此每次计数器达到5000次时,您的代码都会写入文件(请记住重置它)。更好的方法是计算代码上次记录的时间并执行语句写入文件,然后当时间限制超过5秒(并重置计数器)时,while循环将永远运行是的,在while循环中,您需要添加逻辑来跟踪计数器或时间。您能分享一个示例吗?感谢您的回复。在我的代码中,问题是我得到了时间变化。代码将值存储在txt文件中,但存储值需要1-2秒,因此我无法获得确切的时间范围。因此,我考虑先将值存储在数组中,然后存储到文件中。你怎么认为?