forth作业--sql查询

 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)             #调用展示结果的函数
core-进阶

猜你喜欢

转载自www.cnblogs.com/lijie123/p/9022347.html
今日推荐