【问题标题】:How to continuously collect data and save to a file every 5 second如何每5秒连续收集数据并保存到文件
【发布时间】:2020-12-26 14:11:43
【问题描述】:

我正在以 200 毫秒的采样率从传感器收集数据。我需要收集并取其信号强度的平均值,这可以从接收到的数据中检索到。目前我可以每分钟收集和保存数据。但是,我需要缩短时间,以便获得更多的实时平均值。 这是我的代码的样子。

count = 0
record = []

while (str(datetime.datetime.now().second)!="59"):
    ser_bytes = ser.readline().decode('utf-8')[:-1].rstrip() # Read the newest output
    if ser_bytes:
        arr = ser_bytes.split(':')
        i=0
        db=[]
        with open("test_data.csv","a") as f:
            writer = csv.writer(f,delimiter=",")
            writer.writerow([ser_bytes])



ser_bytes = ser.readline().decode('utf-8')[:-1].rstrip() # Read the newest output
if ser_bytes:
    arr = ser_bytes.split(':')
    i=0
    db=[]
    with open("test_data.csv","a") as f:
        writer = csv.writer(f,delimiter=",")
        writer.writerow([ser_bytes])

start_time = str(datetime.datetime.now().hour) + "_" + str(datetime.datetime.now().minute) + "_" + str(datetime.datetime.now().second)

with open(pi_dir1+r_ID+start_time+".csv","w") as correct:                  
    writer = csv.writer(correct, dialect = 'excel')
    with open('test_data.csv', 'r', encoding='utf-8') as mycsv:
        reader = csv.reader((line.replace('\x00','') for line in mycsv))
        try:
            for i, row in enumerate(reader):
                writer.writerow(row)
        except csv.Error:
            print(r_ID+' csv choked on line %s' % (i+1))
            raise
os.remove("test_data.csv")
soc.sendall(str(r_ID).encode("utf8")) 
time.sleep(5)

这是使用记录时间信息作为文件名保存的创建的 csv 数据中的内容(例如 12_12_59) Collected data

然后,我想将持续时间从 1 分钟缩短为 5 秒。首先,我尝试减少到​​ 15 秒,但似乎无法实现 time.sleep(15)。因为当我这样做时,它只会捕获一行,而不是连续记录数据作为采样率。

ser_bytes = ser.readline().decode('utf-8')[:-1].rstrip() # Read the newest output
if ser_bytes:
    arr = ser_bytes.split(':')
    i=0
    db=[]
    with open("test_data.csv","a") as f:
        writer = csv.writer(f,delimiter=",")
        writer.writerow([ser_bytes])

start_time = str(datetime.datetime.now().hour) + "_" + str(datetime.datetime.now().minute) + "_" + str(datetime.datetime.now().second)

with open(pi_dir1+r_ID+start_time+".csv","w") as correct:                  
    writer = csv.writer(correct, dialect = 'excel')
    with open('test_data.csv', 'r', encoding='utf-8') as mycsv:
        reader = csv.reader((line.replace('\x00','') for line in mycsv))
        try:
            for i, row in enumerate(reader):
                writer.writerow(row)
        except csv.Error:
            print(r_ID+' csv choked on line %s' % (i+1))
            raise
os.remove("test_data.csv")
soc.sendall(str(r_ID).encode("utf8")) 
time.sleep(15)

这是我使用 time.sleep(15) 时出现的结果 captured data with time.sleep(15)

此外,为了处理程序,时间被延迟了,所以我的数据没有按我想要的确切持续时间记录。服务器接收到的创建文件如下所示:delayed process

请通过提出解决此问题的建议来帮助我。谢谢。

【问题讨论】:

标签: python pandas multithreading sensors


【解决方案1】:

如果您的数据是表格格式,那么我建议您从数据库表格的角度来考虑。一开始我可能会有一点学习曲线,但请尝试使用像 SQLite 这样简单的东西,或者您选择的任何其他数据库框架。 然后,您可以缩短睡眠时间或运行多个进程并从重叠的时间范围内获取数据。
数据库速度很快,以后您可以将读数从 DB 表导出为 CSV 或您喜欢的任何其他格式。

【讨论】:

  • 原始数据实际上是一行,应该被解析以捕获每一行中的某个参数。解析不在客户端处理,客户端负责逐行读取信息,每隔一段时间以CSV格式写入,发送给服务器。
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2013-04-19
  • 2021-02-09
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多