问题描述
我正在以200ms的采样率从传感器收集数据。我需要收集并取其信号强度的平均值,该强度可以从接收到的数据中获取。目前,我可以每分钟收集和保存数据。但是,我需要缩短时间,以便获得更多的实时平均值。 这是我的代码。
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,")
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",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
请提出解决此问题的建议,以帮助我。谢谢。
解决方法
如果您的数据是表格式的,那么我建议您从数据库表的角度考虑。最初我可能会有一些学习上的困难,但是尝试使用诸如 SQLite 之类的简单工具,或您选择的任何其他数据库框架。
然后,您可以缩短睡眠时间或运行多个进程并从重叠的时间范围中获取数据。
数据库速度很快,以后您可以将读数从数据库表导出为CSV或您喜欢的任何其他格式。