You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.2 KiB
71 lines
2.2 KiB
11 years ago
|
from __future__ import print_function
|
||
|
import csv
|
||
|
import os
|
||
|
|
||
|
|
||
|
class Lo:
|
||
|
src_path = None
|
||
|
los = {}
|
||
|
model = {
|
||
|
'A': {}, 'B': {}, 'C': {}, 'D': {},
|
||
|
'E': {}, 'F': {}, 'G': {}, 'H': {},
|
||
|
}
|
||
|
|
||
|
def __init__(self, filename=None):
|
||
|
base_path = os.getcwd()
|
||
|
f_name = '03_Lo_data.csv' if not filename else filename
|
||
|
self.src_path = os.path.join(base_path, 'raw', f_name)
|
||
|
self.los = {}
|
||
|
with open(self.src_path, 'r') as f:
|
||
|
reader = csv.reader(f)
|
||
|
reader.next()
|
||
|
for r in reader:
|
||
|
lo_id = r[0]
|
||
|
t = {
|
||
|
'A': '%s%s%s%s' % (r[2], r[3], r[6], r[7]),
|
||
|
'B': '%s%s%s' % (r[10], r[12], r[13]),
|
||
|
'C': '%s%s%s%s' % (r[15], r[17], r[18], r[19]),
|
||
|
'D': '%s%s%s' % (r[21], r[22], r[24]),
|
||
|
'E': '%s%s%s%s%s' % (r[27], r[29], r[30], r[31], r[33]),
|
||
|
'F': '%s%s%s' % (r[13], r[15], r[19]),
|
||
|
'G': '%s%s%s' % (r[7], r[13], r[21]),
|
||
|
'H': '%s%s%s' % (r[10], r[22], r[27]),
|
||
|
}
|
||
|
for k, v in t.items():
|
||
|
if v not in self.model[k]: self.model[k][v] = []
|
||
|
self.model[k][v].append(lo_id)
|
||
|
self.los[lo_id] = t.copy()
|
||
|
|
||
|
def get(self, lo_id):
|
||
|
try:
|
||
|
return self.los[lo_id]
|
||
|
except (IndexError, KeyError) as e:
|
||
|
return {}
|
||
|
|
||
|
def get_lo_list(self):
|
||
|
return self.los.keys()
|
||
|
|
||
|
def get_model(self, m_name):
|
||
|
try:
|
||
|
return self.model[m_name]
|
||
|
except IndexError:
|
||
|
return []
|
||
|
|
||
|
def get_mm(self, m_name, value):
|
||
|
return self.get_model_match(m_name, value)
|
||
|
|
||
|
def get_model_match(self, m_name, value):
|
||
|
try:
|
||
|
return self.model[m_name][value]
|
||
|
except IndexError:
|
||
|
return []
|
||
|
|
||
|
def get_mm_tuple(self, *args):
|
||
|
if len(args) > 1 or type(args) != type(()): return []
|
||
|
r = []
|
||
|
for i in args[0]:
|
||
|
if len(i) != 2 or not i[1]: continue
|
||
|
m = self.get_mm(i[0], i[1])
|
||
|
if m: r.append(m)
|
||
|
return set.intersection(*[set(k) for k in r])
|