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()