练习_员工信息表

用户输入条件 条件的解析, 把用户想要的列名 和 条件分开处理文件 逐行读文件, 逐行处理1.默写:带参数的装饰器。需要标注代码的执行步骤。2.整理作业:函数的知识点以及装饰器相关作业。装饰器作业需要自己写一遍,并给作业加注释。3.周末大作业:实现员工信息表文件存储格式如下:id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearcher3,nezha,25,1333235322,IT现在需要对这个员工信息文件进行增删改查。不允许一次性将文件中的行都读入内存。基础必做:a.可以进行查询,支持三种语法:select 列名1,列名2,… where 列名条件支持:大于小于等于,还要支持模糊查找。示例:select name, age where age>22select * where job=ITselect * where phone like 133进阶选做:b.可创建新员工记录,id要顺序增加c.可删除指定员工记录,直接输入员工id即可d.修改员工信息语法:set 列名=“新的值” where 条件#先用where查找对应人的信息,再使用set来修改列名对应的值为“新的值”注意:要想操作员工信息表,必须先登录,登陆认证需要用装饰器完成其他需求尽量用函数实现
def filter_handler(operate,con): # '>','age>22' ''' 进行筛选工作 :param operate: 用户要进行的操作是: > 、< 、= 、like :param con: 用户输入的where条件 :return: 被选中的所有行组成的列表,其中每一行都是一个列表 ''' selected_lst = [] # 被选中的列表 col,val = con.split(operate) # ['age','22'] col = col.strip() val = val.strip() judge = 'int(line_lst[column_dic[col]]) %s int(val)'%operate if operate == '<' or operate == '>' else 'line_lst[column_dic[col]] %s val'%operate f = open('员工信息表.txt',encoding='utf-8') for line in f: line_lst = line.strip().split(',') # id name age phone job if eval(judge): # int(line_lst[column_dic[col]]) selected_lst.append(line_lst) f.close() return selected_lst def get_selected_line(con): # 'age>22' ''' 获取所有要查找的行,并将每一行作为一个列表项存储在selected_lst中 :param con: :return: 存储了符合条件的行的列表 ''' if '>' in con: selected_lst = filter_handler('>',con) 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 def get_show_lst(col_condition): # 'select name,age,job' ''' 获取要展示的列名 :param col_condition: 用户输入的select条件 :return: 列名组成的字典 ''' col_info_lst = col_condition.strip().split('select') # ['', 'name,age,job'] col_info_lst = [col_info_item for col_info_item in col_info_lst if col_info_item.strip()] # 去空 if col_info_lst: # ['name,age,job'] col_info = col_info_lst[0].strip() # ['name,age,job'] if '*' == col_info: return column_dic.keys() # ['id','name','age','phone','job'] elif col_info: ret = col_info.split(',') # ['name','age','job'] return [item.strip() for item in ret] # 对上述式子去空白 else:print(col_info) def show(selected_lst,show_lst): ''' 展示符合条件的内容 :param selected_lst: 符合条件的行的列表 :param show_lst: 所有要提示的字段 :return: None ''' for selected_item in selected_lst: for col in show_lst: print(selected_item[column_dic[col]],end = ' ') print() column_dic = {'id':0,'name':1,'age':2,'phone':3,'job':4} # 文件中每一列的名字和数字的对应关系 # 1. 接收用户的信息 -- 分析信息 condition = input('>>>') # 接收用户的指令: select name,age,job where age>22 # condition = 'select name,age,job where age>22' ret = condition.split('where') # ['select name,age,job' , 'age>22'] con = ret[1].strip() # 根据select条件解析用户需要展示的内容: 'age>22' show_lst = get_show_lst(ret[0]) # 根据where条件解析用户需要展示的内容: 'select name,age,job' # show_lst = ['name','age','job'] selected_lst = get_selected_line(con) # selected_lst中存储了所有符合条件的内容 show(selected_lst,show_lst) # 将符合条件的内容按照用户的需求展示出来

 


__EOF__

本文作者😎
本文链接https://www.cnblogs.com/dongye95/p/10327649.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   dongye95  阅读(288)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示