1 ''' 2 注意 3 1.注意先切分后去空格 4 2.注意打印空 5 3.int比较 6 4.精彩 生成器函数 7 这个版本必须会写! 8 9 ''' 10 11 def read_file(): 12 '''读文件''' 13 with open('userinfo','r') as f: 14 for line in f: 15 line_lst = line.strip().split(',') # ['1','Alex','22','13651054608','IT'] 16 yield line_lst 17 18 def filter_item(col,value,signal): 19 '''筛选条件 col='age' 22 >''' #dic[col] == dic['age'] == 2 20 dic = {'id':0,'name':1,'age':2,'phone':3,'job':4} 21 correct = [] #存储符合条件的行列表 22 for line_lst in read_file(): 23 #['1','Alex','22','13651054608','IT'] age > 20 24 if signal == '>': 25 if int(line_lst[dic[col]]) > int(value): #3.int比较 26 correct.append(line_lst) 27 elif signal == '<': 28 if int(line_lst[dic[col]]) < int(value): 29 correct.append(line_lst) 30 elif signal == '=': 31 if line_lst[dic[col]] == value: 32 correct.append(line_lst) 33 elif signal == 'like': 34 if value in line_lst[dic[col]]: 35 correct.append(line_lst) 36 return correct 37 38 def condition_an(con): 39 # 分析条件 40 # 根据条件中的符号来进行操作: > < = like 41 if '>' in con: # age > 22 42 col_name,value = con.split('>') #age,22 43 col_name = col_name.strip() #'age' 1.注意先切分后去空格 44 value = value.strip() #'22' 45 correct = filter_item(col_name,value,'>') # 筛选出来所有符合条件的项 46 elif '<' in con: # age < 22 47 col_name,value = con.split('<') #age,22 48 col_name = col_name.strip() #'age' 49 value = value.strip() #'22' 50 correct = filter_item(col_name,value,'<') # 筛选出来所有符合条件的项 51 elif '=' in con: # age < 22 52 col_name,value = con.split('=') #age,22 53 col_name = col_name.strip() #'age' 54 value = value.strip() #'22' 55 correct = filter_item(col_name,value,'=') # 筛选出来所有符合条件的项 56 elif 'like' in con: # age < 22 57 col_name,value = con.split('like') #age,22 58 col_name = col_name.strip() #'age' 59 value = value.strip() #'22' 60 correct = filter_item(col_name,value,'like') # 筛选出来所有符合条件的项 61 return correct 62 63 def show(col,correct): 64 # 展示符合条件的行中需要的字段 col = 'name,age,phone,job' '*' 65 dic = {'id': 0, 'name': 1, 'age': 2, 'phone': 3, 'job': 4} 66 if '*' == col.strip(): 67 col_lst = dic.keys() #[id,name,age,phone,job] 68 else: 69 col_lst = col.split(',') #[name,age,phone,job] 70 for i in correct: 71 #i = ['1', 'Alex', '22', '13651054608', 'IT'] 72 for col in col_lst: 73 print(i[dic[col]],end=' ') 74 print() #2.注意打印空 75 # exp = input('>>>') 76 exp = 'select * where phone like 133' 77 # exp = 'select * where age>22' 78 col,con = exp.split('where') # 要显示的列,条件 79 col = col.replace('select','').strip() 80 print(col,con) 81 correct = condition_an(con) #调用分析条件的函数 82 show(col,correct)
1 def read_file(): 2 '''读文件''' 3 with open('userinfo','r') as f: 4 for line in f: 5 line_lst = line.strip().split(',') # ['1','Alex','22','13651054608','IT'] 6 yield line_lst 7 8 def filter_item(col,value,condition): 9 '''筛选条件 10 col='age' 11 value = '22' 12 condition = 'int(line_lst[dic[col]]) > int(value)' 13 ''' 14 dic = {'id':0,'name':1,'age':2,'phone':3,'job':4} 15 correct = [] #存储符合条件的行列表 16 for line_lst in read_file(): 17 #line_lst = ['1','Alex','22','13651054608','IT'] age > 20 18 if eval(condition): #1.最神奇的语句!eval用法,条件返回语句 19 correct.append(line_lst) 20 return correct 21 22 def condition_an(con): 23 # 分析条件 24 # 根据条件中的符号来进行操作: > < = like 25 if '>' in con: # age > 22 26 col_name,value = con.split('>') #age,22 27 condition = 'int(line_lst[dic[col]]) > int(value)' 28 elif '<' in con: # age < 22 29 col_name,value = con.split('<') #age,22 30 condition = 'int(line_lst[dic[col]]) < int(value)' # 筛选出来所有符合条件的项 31 elif '=' in con: # age < 22 32 col_name,value = con.split('=') #age,22 33 condition = 'line_lst[dic[col]] == value' # 筛选出来所有符合条件的项 34 elif 'like' in con: # age < 22 35 col_name,value = con.split('like') #age,22 36 condition = 'value in line_lst[dic[col]]' # 筛选出来所有符合条件的项 37 correct = filter_item(col_name.strip(), value.strip(), condition) # 筛选出来所有符合条件的项 38 return correct 39 40 def show(col,correct): 41 # 展示符合条件的行中需要的字段 col = 'name,age,phone,job' | col = '*' 42 dic = {'id': 0, 'name': 1, 'age': 2, 'phone': 3, 'job': 4} 43 if '*' == col.strip(): 44 col_lst = dic.keys() #[id,name,age,phone,job] 45 else: 46 col_lst = col.split(',') #[name,age,phone,job] 47 for i in correct: 48 #i = ['1', 'Alex', '22', '13651054608', 'IT'] 49 for col in col_lst: 50 print(i[dic[col]],end=' ') 51 print() 52 # exp = input('>>>') 53 # exp = 'select * where phone like 133' 54 exp = 'select * where age>22' 55 col,con = exp.split('where') # 要显示的列,条件 56 # col= 'select * ' con= ' age>22' 57 # col= 'select name,age ' con= ' age>22' 58 col = col.replace('select','').strip() # * | name,age,job... 59 print(col,con) 60 correct = condition_an(con) #调用分析条件的函数 61 show(col,correct) #调用展示结果的函数