column_dic = {"id": 0, "name": 1, "age": 2, "phone": 3, "job": 4} def get_show_list(col_condition): # "select age,name" """ 获取要展示的列名 :param col_condition: 用户输入的select条件 :return: 列名组成的列表 """ col_info_list = col_condition.strip().split("select") # ["", "age,name"] col_info_list = [col_info_item for col_info_item in col_info_list if col_info_item.strip()] # ["age,name"] if col_info_list: col_info = col_info_list[0].strip() # "age,name" if "*" in col_info: return column_dic.keys() elif col_info: ret = col_info.split(",") # [" age ","name"] return [item.strip() for item in ret] # ["age","name"] else: print(col_info) def filter_handler(operate, con): # ">" , "age>22" selected_list = [] col, val = con.split(operate) col = col.strip() val = val.strip() judge = "int(line_list[column_dic[col]]) %s int(val)" % operate if operate == "<" or operate == ">" else "line_list[column_dic[col]] %s val" % operate f = open("student", encoding="utf-8") for line in f: line_list = line.strip().split(",") if eval(judge): selected_list.append(line_list) f.close() return selected_list def get_selected_line(con): # con = "age>22" """ 获取要查找的行,并将每一行作为列表项存储到selected_list :param con: :return: """ if ">" in con: selected_list = filter_handler(">", con) elif "<" in con: selected_list = filter_handler("<", con) elif "=" in con: selected_list = filter_handler("==", con.replace("=", '==')) elif "like" in con: selected_list = filter_handler("in", con) return selected_list def show(selected_list, show_list): for selected_item in selected_list: for col in show_list: print(selected_item[column_dic[col]], end=" ") print() condition = input(">>>") # "select age,name where age>22" ret = condition.split('where') # ["select age,name", "age>22"] con = ret[1].strip() # "age>22" show_list = get_show_list(ret[0]) # ["name", "age"] selected_list = get_selected_line(con) show(selected_list, show_list)