def getLine(filename):
with open(filename,encoding='utf-8') as f:
tittle = f.readline().strip()
tittle = tittle.split(',')
# print(tittle)
for i in f:
dic = {}
i = i.strip().split(',')
print(i)
for mem in range(len(tittle)):
dic[tittle[mem]] = i[mem]
# print(dic)
#可以直接用生成器
yield dic
def input_pharse(s):
"""
解析s,返回字典,{'字段':[],'条件':[]}
"""
data = s.split('select')
if len(data) != 2:
return {'error':'not fit format'}
#data[1]是字段和条件的字符串
data = data[1].split('where')
if len(data) != 2:
return {'error': 'do not contain field,or condition'}
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',data[0])
data[0].replace(' ','')
print('~~~~~!!!!~~~~~~~~~~~~~~~', data[0])
field = data[0].split(',')
condition = data[1].split('and')
# for c in condition:
# print(c.split(' '))
dic = {}
dic.setdefault('field',field)
dic.setdefault('condition',condition)
return dic
def ret_input():
#inp = input('>>>')
inp = 'select * where job == it and age >= 24'
filename = 'users'
pharse_ret = input_pharse(inp)
# print(pharse_ret)
field = pharse_ret['field']
conditon = pharse_ret['condition']
print(field)
print(conditon)
g_table = getLine(filename)
ret = []
for ite in g_table:
# print(type(ite),ite)
for i in conditon:
print(i)
if '>=' in i:
col,val = i.strip().split('>=')
if ite[col.strip()].strip().upper() >= val.strip().upper():
if ite not in ret:
ret.append(ite)
else:
if ite in ret:
ret.remove(ite)
break # 跳出条件循环
elif '<=' in i:
col,val = i.strip().split('<=')
if ite[col.strip()].strip().upper() <= val.strip().upper():
if ite not in ret:
ret.append(ite)
elif ite in ret :
ret.remove(ite)
elif '>' in i :
col,val = i.strip().split('>')
if ite[col.strip()].strip().upper() > val.strip().upper():
if ite not in ret:
ret.append(ite)
else:
if ite in ret:
ret.remove(ite)
break # 跳出条件循环
elif '<' in i:
col,val = i.strip().split('<')
if ite[col.strip()].strip().upper() < val.strip().upper():
if ite not in ret:
ret.append(ite)
print('one fit')
else:
if ite in ret:
ret.remove(ite)
break # 跳出条件循环
elif '==' in i:
col,val = i.strip().split('==')
if ite[col.strip()].strip().upper() == val.strip().upper():
if ite not in ret:
ret.append(ite)
print("fit one ",ret)
else:
if ite in ret :
print('no fit all')
ret.remove(ite)
break#跳出条件循环
else:
return 'error in condition'
print(col,val)
print(ret)
print(type(field),field)
for index in range(len(ret)):
temp_dic = {}
for i in field:
if '*' not in i.strip():
temp_dic[i.strip()] = ret[index][i.strip()]
ret[index] = temp_dic
else:
break
else:
print('all')
print('!!!!',ret)
ret_input()