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
 

day21 05 员工信息表的更多相关文章

  1. 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]

    无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...

  2. python-查询员工信息表

    python查询员工信息表 基本要求: 用户可以模糊查询员工信息 显示匹配了多少条,匹配字符需要高亮显示 代码: #!/usr/env python #coding:utf-8 import time ...

  3. python-打印简单公司员工信息表

    python-打印简单公司员工信息表 要求,输入name不为空,输入次数最多3次,3次后跳出程序: 知识点: raw_input str转int whil if elif else continue ...

  4. python3 员工信息表

    这是最后一条NLP了......来吧 十二,动机和情绪总不会错,只是行为没有效果而已 动机在潜意识里,总是正面的.潜意识从来不会伤害自己,只会误会的以为某行为可以满足该动机,而又不知道有其他做法的可能 ...

  5. day12 python作业:员工信息表

    作业要求: 周末大作业:实现员工信息表文件存储格式如下:id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearc ...

  6. s9.16作业,员工信息表

    转载https://blog.csdn.net/qq_35883464/article/details/83151464 实现员工信息表文件存储格式如下:id,name,age,phone,job1, ...

  7. python练习题-员工信息表

    周末大作业:实现员工信息表文件存储格式如下:id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearcher3,n ...

  8. python基础之员工信息表作业

    周末大礼包 文件存储格式如下: id, name, age, phone, job 1, Alex, 22, 13651054608, IT 2, Egon, 23, 13304320533, Tea ...

  9. python作业员工信息表程序(第四周)

    作业需求: 1. 员工信息表程序,实现增删改查操作: 2. 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 ...

随机推荐

  1. NOI题库--盒子和小球系列 By cellur925

    题目传送门 盒子和小球之二:N个有差别的盒子(1<=N<=20).你有A个红球和B个蓝球.0 <= A <= 15, 0 <= B <= 15.球除了颜色没有任何区 ...

  2. poj 3159 Candies dijkstra + queue

    题目链接: http://poj.org/searchproblem 题目大意: 飞天鼠是班长,一天班主任买了一大包糖果,要飞天鼠分发给大家,班里面有n个人,但是学生A认为学生B比自己多的糖果数目不应 ...

  3. 条件DP UVA 672 Gangsters

    题目传送门 题意:n个歹徒进饭店,可变化宽度的门,范围[0, k],每个歹徒进门在ti时间进门,身材si,进去后有pi的成功值,问最大的成功值 分析:首先按照进门时间排序,dp[i][j] 表示第i个 ...

  4. 题解报告:hdu 1263 水果

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营 ...

  5. JetSpeed2部署至Apusic操作步骤记录

    JetSpeed2部署至Apusic操作步骤记录. 1.创建Apusic新域,配置端口.管理端口和管理密码. 2.将Tomcat/lib目录中的所有jar包复制至Apusic域中的lib目录中(包括数 ...

  6. 437 Path Sum III 路径总和 III

    给定一个二叉树,二叉树的每个节点含有一个整数.找出路径和等于给定数的路径总数.路径不需要从根节点开始,也不需要在叶节点结束,当路径方向必须是向下的(只从父节点到子节点).二叉树不超过1000个节点,节 ...

  7. D. Winter Is Coming 贪心(好题)

    http://codeforces.com/contest/747/problem/D 大概的思路就是找到所有两个负数夹着的线段,优先覆盖最小的长度.使得那时候不用换鞋,是最优的. 但是这里有个坑点, ...

  8. apache-storm-1.0.2.tar.gz的集群搭建(3节点)(图文详解)(非HA和HA)

    不多说,直接上干货! Storm的版本选取 我这里,是选用apache-storm-1.0.2.tar.gz apache-storm-0.9.6.tar.gz的集群搭建(3节点)(图文详解) 为什么 ...

  9. [转]asp.net MVC helper 和自定义函数@functions小结

    本文转自:http://www.cnblogs.com/jiagoushi/p/3904995.html asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的 ...

  10. 最新最强短视频SDK——来自RDSDK.COM

    北京锐动天地信息技术有限公司成立于2007年9月.多年来一直专注于音视频领域核心技术的研发, 拥有Windows.iOS.Android全平台自主知识产权的领先技术产品. 2011年获得新浪战略投资, ...