• day21 05 员工信息表


    day21 05 员工信息表

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

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

    column_dic={'id':0,'name':1,'age':2,'phone':3,'job':4} #文件中每一列的名称和数字的对应关系
    
    def filter_handler(operate,con):#15.将>与age>22分别传入
        '''
        进行筛选工作
        :operate:用户要进行的操作是>/</=/like
        :con:用户输入的where条件
        return:被选中的所有行组成的列表,其中每一行都是一个列素
        '''
        selected_lst=[] #16. 被选中的列表,空的
        col,val=con.split(operate) #17.根据>分割age>22,得到[age,22]
        col=col.strip() #18. col=age
        val=val.strip() #19. avl=22
        judge='int(line_lst[column_dic[col])%s int(val)'%operate if operate=='<' or operate=='>' else 'line_list[column_dic[col]]'
        #20.上面是拼字符串,很长,三元表达式 可从if看起
        # #column_dic[col]=column_dic[age]=2,int(line_lst[2])强转数据类型,里面的%s即operate也就是传入的>号
        #也就是判断int(line_lst[2])是否>22,作为下面judge的判断条件
        f=open('user',encoding ='utf-8')
        for line in f :
            line_lst=line.strip().split(',') # 21. 这里的line_lst=[id,name,age,phone,job]即为#20里面的line_lst
            if eval(judge): #22. 通过上面#20判断真假,如果为真执行下面的代码
                selected_lst.append(line_lst) #23. 把选择的所有符合条件的的行都都加到selected_lst[]中,并返回给调用的地方#14那里
        f.close()
        return  selected_lst
    
    def get_selected_line(con): #13. 用户条件con=’age>22‘被传入
        '''
        获取所有要查找的行,并将每一行作为一个列表项存储在selected_lst中
        :return:存储了符合条件的列表
        '''
        if'>'in con: # 判断传入的con=age>22存在'>'
            selected_lst=filter_handler('>',con) #14. 调用前面的函数filter_handler()   #24.接收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 #25. 返回selected_lst=line_lst给调用的地方#12那里
    
    def get_show_lst(col_codition): #5.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[0].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(',') #9.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): #28. 将#26生成的selected_lst=line_lst和#11生成的show_lst=[['name','age']]传入
        '''
        展示符合条件的的内容
        :param selected_lst:符合条件的行的列表
        :param show_lst:所有要展示的字段
        :return:None
        '''
        for selected_item in selected_lst: #29.循环所有符合条件的行的列表
            for col in show_lst:#30. 循环根据用户条件想要显示的东西
                print(selected_item[colunm_dic[col]],end=' ')#31. 打印根据用户条件而得到的最终结果
            print()

    #从这里开始看: condition
    =input('>>>') #1. 接收用户的指令 #解析用户的指令 ret=condition.split('where')#2. 按照where切割,切割后得到一个列表[假设拿到的是 'select name,age','一个条件:age>22'] con=ret[1].strip() #3. 去空格拿到的是’age>22‘ #根据select条件解析用户需要展示的内容 show_lst=get_show_lst(ret[0]) #4. 将参数’select name,age‘传进去上面的get_show_lst中 #11. 接收#10 返回来的值show_lst=[['name','age']] #根据where条件解析用筛选用户想要查找的内容 selected_lst=get_selected_line(con)#selected_lst中存储了所有符合条件的内容 #12. 将#3生成的用户条件con=’age>22‘传入并调用函数前面的get_selected_line() #26.接收#25返回的值selected_lst=line_lst #将符合条件的内容按照用户的需求展示出来 show(selected_lst,show_lst) #27. 将#26生成的selected_lst=line_lst和#11生成的show_lst=[['name','age']]传入show函数

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

    >>>select name,age where age>22

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

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

    (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
     
  • 相关阅读:
    javaweb 最简单的分页技术
    Jquery选择器小结
    JSON 初探
    C# GridView 的使用
    C# 操作数据库
    Java中String为什么是不可变
    Eclipse使用技巧小结
    Java File类方法使用详解
    JSP基础语法总结
    JSP取得绝对路径
  • 原文地址:https://www.cnblogs.com/wxm422562/p/10836691.html
Copyright © 2020-2023  润新知