day21 05 员工信息表

假设有一个员工信息表,里面有每个员工的名字,id,年龄,电话,还有他们所作的工作,而有时候我们并不需要所有的信息,而想根据某些条件,寻找符合条件即可,即筛选,

比如想要筛选出年龄大于22岁的所有人的信息,此时我们可以根据以下代码来实现:

column_dic={'id':,'name':,'age':,'phone':,'job':} #文件中每一列的名称和数字的对应关系

def filter_handler(operate,con):#.将>与age>22分别传入
'''
进行筛选工作
:operate:用户要进行的操作是>/</=/like
:con:用户输入的where条件
return:被选中的所有行组成的列表,其中每一行都是一个列素
'''
selected_lst=[] #. 被选中的列表,空的
col,val=con.split(operate) #.根据>分割age>,得到[age,]
col=col.strip() #. col=age
val=val.strip() #. avl=
judge='int(line_lst[column_dic[col])%s int(val)'%operate if operate=='<' or operate=='>' else 'line_list[column_dic[col]]'
#.上面是拼字符串,很长,三元表达式 可从if看起
# #column_dic[col]=column_dic[age]=,int(line_lst[])强转数据类型,里面的%s即operate也就是传入的>号
#也就是判断int(line_lst[])是否>,作为下面judge的判断条件
f=open('user',encoding ='utf-8')
for line in f :
line_lst=line.strip().split(',') # . 这里的line_lst=[id,name,age,phone,job]即为#20里面的line_lst
if eval(judge): #. 通过上面#20判断真假,如果为真执行下面的代码
selected_lst.append(line_lst) #23. 把选择的所有符合条件的的行都都加到selected_lst[]中,并返回给调用的地方#14那里
f.close()
return selected_lst def get_selected_line(con): #. 用户条件con=’age>‘被传入
'''
获取所有要查找的行,并将每一行作为一个列表项存储在selected_lst中
:return:存储了符合条件的列表
'''
if'>'in con: # 判断传入的con=age>22存在'>'
selected_lst=filter_handler('>',con) #. 调用前面的函数filter_handler() #.接收23返回的值即selected_lst=line_lst
elif'<'in con:
selected_lst=filter_handler('<',con)
elif '='in con:
selected_lst=filter_handler('==',con.replace('=','=='))
elif 'like' in con:
selected_lst=filter_handler('in',con)
return selected_lst #. 返回selected_lst=line_lst给调用的地方#12那里 def get_show_lst(col_codition): #.’select name,age‘被传进来了
'''
获取要展示的列名
:param col_condition:用户输入的select条件
:return:列名组成的字典
'''
col_info_lst=col_codition.strip().split('select')
#6.将select name,age按照select分割得到‘name,age’,再去掉空得到[’name,age‘]
col_info_lst=[col_info_item for col_info_item in col_info_lst if col_info_item.strip()]
if col_info_lst: #7. 此时col_info_lst=[’name,age‘]
col_info=col_info_lst[].strip() #8. 此时col_info=['name,age‘]
if '*'==col_info:
return column_dic.keys() #符合条件的就返回['name','age','id','job','phone']
elif col_info:
ret=col_info.split(',') #.ret=['name','age']
return [item.strip() for item in ret] #10. return ['name','age']给调用的地方即#4那里
else:print(col_info) def show(selected_lst,show_lst): #. 将#26生成的selected_lst=line_lst和#11生成的show_lst=[['name','age']]传入
'''
展示符合条件的的内容
:param selected_lst:符合条件的行的列表
:param show_lst:所有要展示的字段
:return:None
'''
for selected_item in selected_lst: #.循环所有符合条件的行的列表
for col in show_lst:#. 循环根据用户条件想要显示的东西
print(selected_item[colunm_dic[col]],end=' ')#. 打印根据用户条件而得到的最终结果
print() #从这里开始看: condition=input('>>>') #. 接收用户的指令
#解析用户的指令
ret=condition.split('where')#. 按照where切割,切割后得到一个列表[假设拿到的是 'select name,age','一个条件:age>22']
con=ret[].strip() #. 去空格拿到的是’age>‘
#根据select条件解析用户需要展示的内容
show_lst=get_show_lst(ret[])
#. 将参数’select name,age‘传进去上面的get_show_lst中 #. 接收# 返回来的值show_lst=[['name','age']]
#根据where条件解析用筛选用户想要查找的内容
selected_lst=get_selected_line(con)#selected_lst中存储了所有符合条件的内容
#. 将#3生成的用户条件con=’age>‘传入并调用函数前面的get_selected_line()
#.接收#25返回的值selected_lst=line_lst
#将符合条件的内容按照用户的需求展示出来
show(selected_lst,show_lst) #. 将#26生成的selected_lst=line_lst和#11生成的show_lst=[['name','age']]传入show函数

上面的代码,具体分析了每个函数所实现的功能,每一个参数代表的意义,如果要用户输入条件的时候,这样:

>>>select name,age where age>

额。。由于没有那个员工信息表,运行的最终结果不能够显示,不过大致的代码框架基本如上面的代码,里面的参数和一些定义,可以根据实际情况改变,

四个函数以及对应的功能:

(1)def get_show_lst(col_codition):
获取要展示的列名
:param col_condition:用户输入的select条件
:return:列名组成的字典 (2)def get_selected_line(con):
获取所有要查找的行,并将每一行作为一个列表项存储在selected_lst中
:return:存储了符合条件的列表 (3)def filter_handler(operate,con):
进行筛选工作
:operate:用户要进行的操作是>/</=/like
:con:用户输入的where条件
return:被选中的所有行组成的列表,其中每一行都是一个列素 (4)def show(selected_lst,show_lst):
展示符合条件的的内容
:param selected_lst:符合条件的行的列表
:param show_lst:所有要展示的字段
:return:None
 

最新文章

  1. ubuntu安装配置elasticSearch(vagrant)
  2. 学习笔记---C/C++语法
  3. tomcat映射路径的配置方法
  4. 记录思想分享知识编辑器 Markdown 编辑阅读器
  5. Android照片墙加强版,使用ViewPager实现画廊效果
  6. Testing - 测试基础 - 探索
  7. Leetcode | N-Queens I &amp; II
  8. C# 文件流基本操作步骤
  9. 安装配置Apache
  10. **json_encode:让Json更懂中文(JSON_UNESCAPED_UNICODE)
  11. 开启mysql慢查询日志并使用mysqldumpslow命令查看
  12. /dev/null &amp;
  13. Math.random与java.util.Random的差别
  14. 蓝桥杯-密码发生器-java
  15. python pandas stack和unstack函数
  16. Activity之间的数据传递-android学习之旅(四十七)
  17. Spring Boot(二):Spring-Data-JPA操作数据库( Hibernate)增删改查
  18. 深入理解Java虚拟机读书笔记2----垃圾收集器与内存分配策略
  19. Unity中建立文本保存数据
  20. bnu——GCD SUM (莫比乌斯反演)

热门文章

  1. (5)css盒子模型(基础上)
  2. [Swift]编码拾遗
  3. 线程池之ThreadPoolExecutor使用
  4. 《Windows核心编程系列》九谈谈同步设备IO与异步设备IO之同步设备IO
  5. 《windows核心编程系列》四谈谈进程的建立和终止
  6. 进击的Python【第八章】:动态导入模块、断言、socket开发之SSH,FTP
  7. _bzoj2002 [Hnoi2010]Bounce 弹飞绵羊【分块】
  8. Rooks LightOJ - 1005
  9. GOTO语句以及GOTO机制的模式实现
  10. 转: ORA-06508 could not find program unit being called: &quot;DBSNMP.BSLN_INTERNAL