使用python将数组值存储在文本文件中

使用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

我正在研究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:
 # 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])