2016-12-29 3 views
0

Я думаю, что есть простой ответ на этот вопрос, но я просто наклоняю голову. В принципе у меня есть список данных, который является результатомприращение временных меток произвольным дельтатимом и пара с перечнем данных

span = 2 
datas = a['value'].split(",") 
Data_list = [".".join(datas[i:i+span]) for i in range(0, len(datas), span)] 

#Where a['value'] is a list 

Я пытаюсь сделать новый список, соединяющий первый результат от Data_list, с меткой времени. Тогда второй с Date_time + deltatime, третий, Date_time + 2* deltatime и т.д.

#Where T['value'] is a list 
Date_time = datetime.strptime(T['value'], '%d-%m-%Y %H:%M:%S').time() 
deltatime = 9e-5 

В настоящее время я использую этот код

################# 
DeltaTimeS = 9e-5 
################# 

Date_time = datetime.strptime(T['value'], '%d-%m-%Y %H:%M:%S').time() 
print 'Date_time =',Date_time 

def addSecs(tm, secs): 
    fulldate = datetime(100, 1, 1, tm.hour, tm.minute, tm.second) 
    fulldate = fulldate + timedelta(seconds=secs) 
    return fulldate.time() 

#a = datetime.now().time() 
a = Date_time 
b = addSecs(a, DeltaTimeS) 

#for a in Data['result'][:1]:  #only print the first result in the list 

span = 2 
datas = a['value'].split(",") 
Data_list = [".".join(datas[i:i+span]) for i in range(0, len(datas), span)] 

for a in Data_list: 
    print a,b 

который печатает

0.02027 14:59:08.000090 
0.01549 14:59:08.000090 
0.00559 14:59:08.000090 
-0.00760 14:59:08.000090 
-0.02439 14:59:08.000090 

список со всеми данными и (который изменяется только один раз), а не увеличивается каждый раз. Любая помощь будет потрясающей. Возможно, подсчитав размер первого списка с помощью «len», а затем сделав диапазон для «b», но как увеличить b каждый раз?

ответ

1

Примечания: Код, который вы предоставили не может быть использован для воспроизведения вывода, который вы получите. Поэтому мой ответ основан на том, что я понимаю из вашего вопроса и много импровизации.

Временная метка, которую вы печатаете каждый раз, равна b, которая оценивается один раз, вызывая addSecs. Почему вы ожидаете, что у него будет другое значение для каждой итерации вашего последнего цикла for?

Если вы хотите увеличить временную метку, вам нужно позвонить addSecs для каждой итерации цикла и соответствующим образом отрегулировать второй параметр. Один простой способ для достижения этой цели, заключается в использовании enumerate получить счетчик итераций цикла, и умножить DeltaTimeS этого счетчика:

from datetime import datetime, timedelta 

T = {} 
T['value'] = "29-12-2016 14:59:08" 
a = {} 
a['value'] = "1,2,3,4,5,6,7,8" 

DeltaTimeS = 9e-5 
Date_time = datetime.strptime(T['value'], '%d-%m-%Y %H:%M:%S').time() 

def addSecs(tm, secs): 
    fulldate = datetime(100, 1, 1, tm.hour, tm.minute, tm.second) 
    fulldate = fulldate + timedelta(seconds=secs) 
    return fulldate.time() 

span = 2 
datas = a['value'].split(",") 
Data_list = [".".join(datas[i:i+span]) for i in range(0, len(datas), span)] 

for i, x in enumerate(Data_list): 
    print x, addSecs(Date_time, i * DeltaTimeS) 

Результат:

1.2 14:59:08 
3.4 14:59:08.000090 
5.6 14:59:08.000180 
7.8 14:59:08.000270 
+0

Большое спасибо. Я был не настолько, что ожидал, что время изменится. Более того, я не мог понять, как это сделать с форматом date.time. Я пытался с петлями и считать, но это не привело меня туда. Спасибо за отличный новый инструмент - перечислите - !!! –

0

Предлагает Вам использовать enumerate(), что-то вроде:

import datetime as dt 

# inputs 
values = [ 
    0.02027, 
    0.01549, 
    0.00559, 
    -0.00760, 
    -0.02439, 
]  
start_time = dt.datetime.now() 

delta_time_seconds = 9e-5 
format = '%d-%m-%Y %H:%M:%S' 

# build a list of data, timestamp tuples  
list_of_tuples = [(value, (start_time + 
          dt.timedelta(seconds=i*delta_time_seconds) 
          ).strftime(format)) 
        for i, value in enumerate(values)] 

# show what we got 
for data_point in list_of_tuples: 
    print(data_point[0], data_point[1]) 

 Смежные вопросы

  • Нет связанных вопросов^_^