使用python将数组值存储在文本文件中
我正在研究python 2.7 . 我正在从UART获取串行数据 我试图保存串行数据值以及接收数据时的实时性 从UART接收的数据格式如下: 2.1862745098X 2.42156862745X 2.42156862745X 0.401960784314X 0.0X 0.637254901961X 1.49019607843X…………以此类推 我使用以下代码随时间保存这些值:使用python将数组值存储在文本文件中,python,python-2.7,Python,Python 2.7,我正在研究python 2.7 . 我正在从UART获取串行数据 我试图保存串行数据值以及接收数据时的实时性 从UART接收的数据格式如下: 2.1862745098X 2.42156862745X 2.42156862745X 0.401960784314X 0.0X 0.637254901961X 1.49019607843X…………以此类推 我使用以下代码随时间保存这些值: f1 = open('accelerometer sensor1.txt','w') while 1: # Rea
f1 = open('accelerometer sensor1.txt','w')
while 1:
# Read from serial port, blocking
data =ser.read(1)
data1=(data)
# If there is more than 1 byte, read the rest
n = ser.inWaiting()
data1 = (data1 + ser.read(n))
l = data1.split( )
#t1 = datetime.datetime.now()
x = [d.strip("X") for d in l if d[len(d)-1] == "X"]
for i in range(0,len(x)):
f1.write(str(datetime.datetime.now()))
f1.write("\t")
f1.write(str(x[i]))
f1.write("\n")
我面临的问题是,我在特定的时间接收到大量的值。因此,当我保存数据时,其形式如下:
2014-09-22 11:30:40.980000 2.1862745098
2014-09-22 11:30:40.980000 2.42156862745
2014-09-22 11:30:40.980000 1.71568627451
2014-09-22 11:30:40.980000 0.401960784314
2014-09-22 11:30:40.980000 0.0
2014-09-22 11:30:40.980000 0.637254901961
2014-09-22 11:30:40.980000 1.49019607843
2014-09-22 11:30:40.980000 2.42156862745
2014-09-22 11:30:40.980000 2.5
2014-09-22 11:30:40.980000 1.58823529412
2014-09-22 11:30:40.980000 0.78431372549
2014-09-22 11:30:40.980000 0.0
2014-09-22 11:30:40.980000 0.196078431373
2014-09-22 11:30:40.980000 1.17647058824
2014-09-22 11:30:40.980000 1.74509803922
2014-09-22 11:30:40.980000 2.49019607843
2014-09-22 11:30:40.980000 2.44117647059
2014-09-22 11:30:40.980000 1.33333333333
2014-09-22 11:30:40.980000 0.558823529412
2014-09-22 11:30:40.980000 0.0
2014-09-22 11:30:40.980000 0.205882352941
2014-09-22 11:30:40.980000 1.43137254902
2014-09-22 11:30:40.980000 2.08823529412
我不想要这种格式,我想要接收到的每个样本的实时时间,而不是接收到的一组样本点的实时时间
我希望文本文件显示如下内容:
2014-09-22 11:30:40.980000 2.1862745098
2014-09-22 11:30:40.980010 2.42156862745
2014-09-22 11:30:40.980020 1.71568627451
2014-09-22 11:30:40.980030 0.401960784314
2014-09-22 11:30:40.980040 0.0
我怎样才能做到?请给出一些建议
谢谢`
编辑
我希望每个采样点都有不同的时间戳。这应该是可能的,因为每个采样点单独通过串行端口,而不是在一个组中。我认为我如何阅读这些示例点可能存在问题,如果我能够以某种方式单独阅读它们,那么我的目的就会得到解决
我试着分别获取每个采样点。我可以这样做,但代码已经变得非常缓慢。
我就这么做了
data =ser.readline(5)
data1=(data)
通过UART传输的值类型为:
127X 154X 100X 158X 0X 20X
有没有一种方法可以在不影响速度的情况下单独读取数值。我想您希望在一个时间戳内获得数字的平均值。请看一下这段代码,它聚合了给定的值,如果时间戳不同,则将其写入文件 缓存变量应在循环外部初始化;-) 我希望这能满足你的需要
干杯你知道你想要的格式吗?如果是,请加上。如果没有,请描述更多您的需求。看起来你不需要有历史数据,对吗?请再次检查问题。我添加了所需的格式。此答案不符合我的需要。我不想取样本点的平均值。我希望每个采样点都有不同的时间戳,而不计算它们的平均值。这应该是可能的,因为每个采样点单独通过串行端口,而不是在一个组中。我认为我如何阅读这些样本点可能有问题,如果我能以某种方式单独阅读它们,那么我的目的就会解决,但现在我无法做到。你在开玩笑吗?你以前就不能告诉我吗?我对你的环境一无所知。这不是我的工作,我只是想帮忙。你自己试试吧,我出去了。
cache = ('', 0, 0.0)
def aggregate(value):
now = str(datetime.datetime.now())
c_date, c_count, c_avg = cache
if now != c_date:
# write c_avg and c_date to file
f1.write(c_date)
f1.write("\t")
f1.write(str(c_avg))
f1.write("\n")
# after that, clear c_count and c_avg
c_count = 0
c_avg = 0.0
if c_count is 0:
c_count = 1
c_avg = float(value)
else:
c_avg = ((c_avg * c_count) + float(value)) / (c_count + 1)
c_count += 1
cache = (now, c_count, c_avg)
for i in range(0,len(x)):
aggregate(x[i])