Форум сайта python.su
Добрый день всем. подскажите пожалуйста как наиболее лаконично и просто решить следующую задачу.
есть демон, который каждые 5s собирает числовые данные, сейча собирает в dict, можно сдлеать в list. Данные следующего вида:
{unixtime: value, unixtime: value, ...etc}
{'1315488736': 0.17000000000000001, '1315488734': 0.17999999999999999, '1315488740': 0.14999999999999999, '1315488738': 0.17000000000000001}
{
"data": [
{"label":"1 min = ........", "data":[[1, 1], [2, 2], [3, 3], [4, 2], [5, 1], [6, 1], [7, 1], [8, 1], [9, 2], [10, 3], [11, 2], [12, 1], [13, 1], [14, 1]]},
{"label":"5 min = ........", "data":[[1, 1], [2, 1], [3, 2], [4, 1], [5, 1], [6, 1], [7, 1], [8, 1], [9, 1], [10, 2], [11, 3], [12, 2], [13, 1], [14, 1]]}
],
"ticks": {
"from": 1315414833147,
"to": 1315416933147
}
}
data":[[unixtime, value]
"from": first unixtime
"to": last unixtime
Офлайн
import time
import pprint
from datetime import datetime, timedelta
test_in = {'1315488736': 0.17000000000000001,
'1315488734': 0.17999999999999999,
'1315488740': 0.14999999999999999,
'1315488738': 0.17000000000000001}
def preprocess(input):
def get_time_slice(tup, period):
ts_start = tup[0][0]
ts_end = ts_start + period
slice = filter(lambda a: a[0] < ts_end, tup)
return map(lambda a: [time.mktime(a[0].timetuple()), a[1]], slice)
tup = list()
ksorted = sorted(input.keys())
ts_min = min(ksorted)
ts_max = max(ksorted)
for k in ksorted:
dt = datetime.fromtimestamp(float(k))
tup.append((dt, input[k]))
res = dict()
tmp = list()
for slice in (1, 5):
key = '%d_min' % slice
val = get_time_slice(tup, timedelta(minutes=slice))
tmp.append({key: val})
res['data'] = tmp
res['ticks'] = {'from': ts_min, 'to': ts_max}
return res
pprint.pprint(preprocess(test_in))
Офлайн
прочитайте вначале про json формат и нарисуйте нормальную структуру, которая вам действительно нужна и с которой просто работать, сейчас у вас это все выглядить, аля симпотичненько, но функциональности в этом не видно
Офлайн