2014-09-22 4 views
-1

저는 파이썬 2.7 에서 일하고 있습니다. UART에서 직렬 데이터를 가져오고 있습니다.파이썬을 사용하여 텍스트 파일에 배열 값을 저장하십시오.

데이터를 수신하면 실시간 데이터 값을 실시간으로 저장하려고합니다.

2.1862745098X 2.42156862745X 2.42156862745X 0.401960784314X 0.0X 0.637254901961X 1.49019607843X ............ 기타 등등

:

데이터 UART로부터의 형식은

는 I는 다음 코드를 이용하여 시간과 함께 값을 저장하고있다 : I 직면하고

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") 

문제점 I가 특정 시간에 다수의 값을 수신하고있다. 내가 데이터를 저장할 때, 그것의 형식은 :

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 

:

나는 텍스트 파일이 뭔가를 보여주고 싶은? 몇 가지 제안을하십시오.

Thanks`는

편집

나는 각각의 샘플 포인트는 다른 타임 스탬프를 갖고 싶어. 이것은 각 샘플 포인트가 그룹이 아닌 개별적으로 직렬 포트를 통해 들어 오기 때문에 가능해야합니다. 나는이 샘플 포인트를 읽는 방법에 문제가있을 수 있다고 생각합니다. 어떻게 든 개별적으로 읽으면 내 목적이 해결 될 것입니다.

각 샘플 포인트를 개별적으로 얻으려고했습니다. 그렇게 할 수는 있지만 코드가 매우 느려졌습니다. 난 그냥 한

data =ser.readline(5) 
    data1=(data) 
UART를 통해 오는

값이 유형은 다음과 같습니다 127X 154X 100X 158X 0X 20 배 .............

내용을 읽어 수있는 방법이 있나요 값을 개별적으로 또한 속도를 손상시키지 않고

+0

원하는 형식을 알고 있습니까? 그렇다면 추가하십시오. 그렇지 않다면, 더 자세하게 설명하십시오. 과거 데이터가 필요하지 않은 것 같습니다. – mrcrgl

+0

다시 질문을 확인하십시오. 원하는 형식을 추가했습니다. – yuvraj

답변

0

타임 스탬프 내의 숫자의 평균을 갖고 싶습니다. 이 코드를 살펴보고 지정된 값을 집계하고 타임 스탬프가 다른 경우 파일에 기록합니다.

캐시 변수

는 루프 ;-) 나는 이것이 당신의 필요를 채우기 희망

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]) 

외부 초기화해야한다.

건배

+0

이 답변은 내 필요를 충족시키지 못합니다. 평균 샘플 포인트를 갖고 싶지 않습니다. 나는 각 샘플 포인트가 그들의 평균을 취하지 않고 다른 타임 스탬프를 가지길 원한다. 이것은 각 샘플 포인트가 그룹이 아닌 개별적으로 직렬 포트를 통해 들어 오기 때문에 가능해야합니다. 이 샘플 포인트를 읽는 방법에 문제가있을 수 있다고 생각합니다. 어떻게 든 개별적으로 읽으면 내 목적이 해결되지만 지금은 할 수 없습니다. – yuvraj

+0

농담하니? 너는 전에 이것을 말할 수 있니? 당신의 환경에 대한 단서가 없습니다. 그건 내 직업이 아니에요. 나는 막 도움을 주려고했습니다. 너 혼자 해봐, 나왔다. – mrcrgl

+0

죄송합니다. 나는 무례하다고 생각하지 않았습니다. ..... – yuvraj

관련 문제