day21 05 员工信息表
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 员工信息表的更多相关文章
- 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]
无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...
- python-查询员工信息表
python查询员工信息表 基本要求: 用户可以模糊查询员工信息 显示匹配了多少条,匹配字符需要高亮显示 代码: #!/usr/env python #coding:utf-8 import time ...
- python-打印简单公司员工信息表
python-打印简单公司员工信息表 要求,输入name不为空,输入次数最多3次,3次后跳出程序: 知识点: raw_input str转int whil if elif else continue ...
- python3 员工信息表
这是最后一条NLP了......来吧 十二,动机和情绪总不会错,只是行为没有效果而已 动机在潜意识里,总是正面的.潜意识从来不会伤害自己,只会误会的以为某行为可以满足该动机,而又不知道有其他做法的可能 ...
- day12 python作业:员工信息表
作业要求: 周末大作业:实现员工信息表文件存储格式如下:id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearc ...
- s9.16作业,员工信息表
转载https://blog.csdn.net/qq_35883464/article/details/83151464 实现员工信息表文件存储格式如下:id,name,age,phone,job1, ...
- python练习题-员工信息表
周末大作业:实现员工信息表文件存储格式如下:id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearcher3,n ...
- python基础之员工信息表作业
周末大礼包 文件存储格式如下: id, name, age, phone, job 1, Alex, 22, 13651054608, IT 2, Egon, 23, 13304320533, Tea ...
- python作业员工信息表程序(第四周)
作业需求: 1. 员工信息表程序,实现增删改查操作: 2. 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 ...
随机推荐
- java-通过反射获取目标类的属性,方法,构造器
首先定义一个urse package com.studay_fanshe; public class User { private String uname; private int age; pri ...
- Luogu P1004/P1006 方格取数/传纸条 【棋盘Dp】 By cellur925
我明明记得写过这篇啊qwq为什么会搞丢 两题几乎一样. 如果再拓展到k条路,就要用网络流跑了,本蒟现在还不会. 我们容易想到四维dp,但是有一种更好的方法. 首先,先从左上到右下.再从右下到左上可以近 ...
- Kubernetes集群认证
1.集群搭建:https://www.kubernetes.org.cn/3808.html 2.集群验证:https://www.kubernetes.org.cn/1861.html
- DP(DAG) UVA 437 The Tower of Babylon
题目传送门 题意:给出一些砖头的长宽高,砖头能叠在另一块上要求它的长宽都小于下面的转头的长宽,问叠起来最高能有多高 分析:设一个砖头的长宽高为x, y, z,那么想当于多了x, z, y 和y, x, ...
- APP统计
APP统计就是统计用户使用app的各项指标,比如说日活跃量,页面打开次数,新增用户数量,用户年龄分布,用户地区分布,用户性别分布以及用户使用时间段等等.将统计出来的用户信息进行比对分析,可以服务公司的 ...
- JSP页面自动刷新
1.页面自动刷新:把如下代码加入<head>区域中<meta http-equiv="refresh" content="20">,其中 ...
- SPFarm.local返回值为null
创建了一个控制台应用程序,想输出SP2010服务器场下所有对象模型信息,结果:SPFarm.local返回值为null. 经查询解决方法: 1 .net framework版本要使用3.5: 2 目标 ...
- 使用 ServerSocket 进行文件上传,以及用Tomcat启动ServerSocket时,会卡死解决
服务器端代码 import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOExcept ...
- 自学 iOS - 三十天三十个 Swift 项目 第二天
继续做仿造着别人的第二个 1.首先下载 一些字体 网上搜索 "造字工房" 2.把下载的相应字体文件放到工程之中,就Ok了 不多说 效果如下 可以下面这个方法 检索项目里面所有的字体 ...
- flex弹性布局操练2
上一个是练习的1个内元素的,这次练习两个元素的. ul.box1 { list-style:none; background-color:black; display:flex; justify-co ...