Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何连续收集数据并每5秒保存到文件_Python_Pandas_Multithreading_Sensors - Fatal编程技术网

Python 如何连续收集数据并每5秒保存到文件

Python 如何连续收集数据并每5秒保存到文件,python,pandas,multithreading,sensors,Python,Pandas,Multithreading,Sensors,我正在以200毫秒的采样率从传感器收集数据。我需要收集并取其信号强度的平均值,该值可以从接收到的数据中检索。目前我可以每分钟收集和保存数据。但是,我需要缩短时间,以便获得更多的实时平均值。 下面是我的代码的样子 count = 0 record = [] while (str(datetime.datetime.now().second)!="59"): ser_bytes = ser.readline().decode('utf-8')[:-1].rstrip()

我正在以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)

然后,我想把持续时间从1分钟缩短到5秒。首先,我试图将时间缩短到15秒,但似乎我无法实现时间。睡眠(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)
下面是我使用时间时会出现的情况。睡眠(15)

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


请帮我提出解决这个问题的建议。谢谢。

如果您的数据是表格式的,那么我建议您从数据库表的角度考虑。最初可能会有一点学习曲线,但请尝试使用一些简单的工具,如SQLite,或您选择的任何其他数据库框架。 然后,您可以缩短睡眠时间,或者运行多个进程并从重叠的时间段中提取数据。

数据库速度很快,以后您可以将读数从DB表格导出到CSV或任何其他您喜欢的格式。

如果您的数据是表格格式,那么我建议您从数据库表格的角度考虑。最初可能会有一点学习曲线,但请尝试使用一些简单的工具,如SQLite,或您选择的任何其他数据库框架。 然后,您可以缩短睡眠时间,或者运行多个进程并从重叠的时间段中提取数据。

数据库速度很快,以后您可以将读数从DB表导出到CSV,或者您喜欢的任何其他格式。

我可以帮助您使用时间和计划模块设置计划自动任务的最佳方法,如本例我可以帮助您使用时间和计划模块设置计划自动任务的最佳方法,如本例原始数据实际上是一行,应进行分析,以捕获每个模块中的特定参数线路。解析不是在客户端进行的,客户端负责逐行读取信息,每隔一段时间以CSV格式写入,并将其发送到服务器。原始数据实际上是一行,应该对其进行解析,以捕获每行中的某个参数。解析不在客户端处理,客户端负责逐行读取信息,每隔一定时间以CSV格式写入,并将其发送到服务器。