我正在通过串行监视器从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!!!")
答案 0 :(得分:1)
最简单的解决方案是使用str.strip()
。这将从字符串的开头和结尾删除所有空格/制表符/换行符。
如果您希望保留空格/制表符,则可以仅提供换行符作为参数,例如
line.strip('\n')
要仅剥离左侧或右侧,可以使用str.lstrip
和str.rstrip
变体。
在您的用例中,我建议一个简单的条就足够了,例如:
f.write(line.strip())