Newer
Older
ondotori / merge.py
#!/usr/bin/env python

import csv
from backports import lzma
from datetime import date, timedelta

result = []
sensorlist = [1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20]

def gather_data(frm, to, which):
	global result
	if which == 0:
		dbdate = frm
	else:
		dbdate = to
	dname = "%04d%02d" % (dbdate.year, dbdate.month)
	frm_s = frm.strftime("%Y/%m/%d 00:00")
	to_s  = to.strftime("%Y/%m/%d 23:59")
	tmplist = []
	for i in sensorlist:
		no = str(i)
		fname = "./data/"+no+"/"+dname+".csv.xz"
		r1 = csv.DictReader(lzma.LZMAFile(fname), fieldnames=["datetime", "temp-"+no, "humid-"+no])
		tmp=filter(lambda x: x["datetime"] >= frm_s and x["datetime"] <= to_s, r1)
		if tmp == []: continue
		tmplist.append(tmp)
	result += [x for s in zip(*tmplist) for x in s]

to = date.today()
frm = to - timedelta(15)

gather_data(frm, to, 0)
if frm.month != to.month:
	gather_data(frm, to, 1)

# align on 10 min.
for i in range(len(result)):
	result[i]["datetime"] = result[i]["datetime"][:-1]+"0"
	
result.sort(key=lambda x: x["datetime"])
prev=""
fa = []
for entry in result:
	if entry["datetime"] < "2016/12/01 00:00": continue
	if entry["datetime"] == prev:
		fa[-1] = {k: v for dic in [entry, fa[-1]]
			for k, v in dic.items()}
	else:
		fa.append(entry)
	prev = entry["datetime"]

print "var data = "
print fa