首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为使用PySerial收集的数据添加时间戳并导出到csv?

如何为使用PySerial收集的数据添加时间戳并导出到csv?
EN

Stack Overflow用户
提问于 2018-03-03 11:20:55
回答 2查看 1.4K关注 0票数 0

我正在尝试从多个设备收集串行数据,时间戳,并将其导出到.csv文件。我想为每个设备编写单独的模块,以便它们将数据返回到主模块,并在其中完成对csv的所有写入。

以下程序将日期和时间写入csv,但不写入从设备模块返回的数据。

代码语言:javascript
运行
复制
import time
import csv
from threading import Thread
import fio2

def Csv_creator():
    my_file = open('test_csv.csv', 'w+')

    with my_file:
        new_file = csv.writer(my_file)

def Timestamp():
    date_now = time.strftime('%d/%m/%y')
    time_now = time.strftime('%H:%M:%S')
    return [date_now,time_now]


def Write_loop():
    Csv_creator()
    fio2.Initialize()

    while True:
        with open('test_csv.csv', 'a') as f:
            [date_now,time_now] = Timestamp()
            fio2_data = fio2.Reader()
            print fio2_data
            to_write = [date_now,time_now,fio2_data]
            csv_file = csv.writer(f)
            csv_file.writerow(to_write)     

t = Thread(target=Write_loop)
t.daemon = True
t.start()

raw_input("Press any key to stop \n")

设备模块如下图所示。它自己可以很好地工作,但我很难让它返回值并将其写入csv文件。

代码语言:javascript
运行
复制
import serial

ser = serial.Serial("COM6",
                    baudrate=2400,
                    bytesize=serial.EIGHTBITS,
                    parity =serial.PARITY_ODD,
                    timeout=1,
                    writeTimeout =1)


def Initialize():
    global ser
    try:
        ser.isOpen()
        print("\n Serial is open")
    except: 
        print ("Error: serial Not Open")

def Reader():
    global ser
    if (ser.isOpen()):

        try:                    
            x = ser.readline().decode()
            x = (x)
            return x
        except:
            return "unable to print"
    else: 
        return "cannot open serial port"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-06 08:35:58

我想通了。我不得不删除一些与十进制值相关的垃圾字母。首先,我将接收到的数据更改为字符串,并替换垃圾字母。下面是我是如何改变它的:

代码语言:javascript
运行
复制
[date_now,time_now] = Timestamp()
fio2_data = str(fio2.Reader()).replace("\r\n","")
fio2_data = fio2_data.replace("\x000","")
write_list = [date_now,time_now,fio2_data]
票数 0
EN

Stack Overflow用户

发布于 2018-03-05 02:59:56

我建议将文件移到外部,而不是每次都在循环中打开文件:

代码语言:javascript
运行
复制
with open('test_csv.csv', 'a') as f:
    csv_file = csv.writer(f)

    while True:
        date_now, time_now = Timestamp()
        fio2_data = fio2.Reader()
        csv_file.writerow([date_now, time_now, fio2_data])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49080298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档