【发布时间】:2019-06-03 16:23:44
【问题描述】:
我正在通过串行监视器从 arduino 读取多个传感器的数据。 我编写了一个 python 脚本,用于将数据从串行监视器写入 txt/csv 文件。 该文件稍后会被 LabVIEW 读取。 问题是串行监视器显示如下值:
1,42.00,444.00,2.17,-15.43,-49.25,79.12,26.18,-8218,-23404,18432,-579,-757,371,620.00
2,42.00,444.00,2.17,-15.27,-49.30,79.29,26.27,-8110,-23344,18384,-535,-782,396,235.00
3,42.00,443.00,2.17,-15.64,-49.33,79.29,26.27,-8274,-23276,18228,-615,-761,371,425.00
但这就是它在 txt 文件中的显示方式:
1,42.00,444.00,2.17,-15.43,-49.25,79.12,26.18,-8218,-23404,18432,-579,-757,371,620.00
2,42.00,444.00,2.17,-15.27,-49.30,79.29,26.27,-8110,-23344,18384,-535,-782,396,235.00
3,42.00,443.00,2.17,-15.64,-49.33,79.29,26.27,-8274,-23276,18228,-615,-761,371,425.00
在LabVIEW上读取时,这些额外的行被LabVIEW读取为value=0。因此,我得到了一个错误的数据和图表,它飙升到一个值并回落到 0。
“那么我如何在写入文件时删除多余的换行符。”
我在某处读到添加: newline=' ' 将完成这项工作。 但它没有发生。 另外我觉得打印出来的不仅仅是“\n”,我猜是“\n\r”。
代码片段:
import serial
from datetime import datetime as dt
import time
serial_port='COM5'
baud_rate=9600
path="D:\LabVIEW\DB_Store.txt"
ser=serial.Serial(serial_port,baud_rate)
if ser.is_open:
while ser.is_open:
with open(path,'a') as f:
print("Data flushed!")
line=ser.readline()
#f.write(str(dt.now()))
f.write(str(line))
else:
print("Port is closed!!!")
【问题讨论】:
-
使用 re.sub('\n', '', input)
-
也许您可以简单地阅读除 ladt 字符之外的每一行,例如
line = ser.readline()[:-1] -
您可以更改 Arduino 或 LabVIEW 代码,还是只更改您发布的 Python 代码?如果您无法更改 LabVIEW 代码,我建议删除
[labview]标签,因为问题与 LabVIEW 无关。 -
什么是 Arduino 代码?