日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

day21 05 員工信息表

 印度阿三17 2019-05-09

假設(shè)有一個(gè)員工信息表,里面有每個(gè)員工的名字,id,年齡,電話,還有他們所作的工作,而有時(shí)候我們并不需要所有的信息,而想根據(jù)某些條件,尋找符合條件即可,即篩選,

比如想要篩選出年齡大于22歲的所有人的信息,此時(shí)我們可以根據(jù)以下代碼來(lái)實(shí)現(xiàn):

column_dic={'id':0,'name':1,'age':2,'phone':3,'job':4} #文件中每一列的名稱和數(shù)字的對(duì)應(yīng)關(guān)系

def filter_handler(operate,con):#15.將>與age>22分別傳入
    '''
    進(jìn)行篩選工作
    :operate:用戶要進(jìn)行的操作是>/</=/like
    :con:用戶輸入的where條件
    return:被選中的所有行組成的列表,其中每一行都是一個(gè)列素
    '''
    selected_lst=[] #16. 被選中的列表,空的
    col,val=con.split(operate) #17.根據(jù)>分割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.上面是拼字符串,很長(zhǎng),三元表達(dá)式 可從if看起
    # #column_dic[col]=column_dic[age]=2,int(line_lst[2])強(qiáng)轉(zhuǎn)數(shù)據(jù)類型,里面的%s即operate也就是傳入的>號(hào)
    #也就是判斷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. 通過(guò)上面#20判斷真假,如果為真執(zhí)行下面的代碼
            selected_lst.append(line_lst) #23. 把選擇的所有符合條件的的行都都加到selected_lst[]中,并返回給調(diào)用的地方#14那里
    f.close()
    return  selected_lst

def get_selected_line(con): #13. 用戶條件con=’age>22‘被傳入
    '''
    獲取所有要查找的行,并將每一行作為一個(gè)列表項(xiàng)存儲(chǔ)在selected_lst中
    :return:存儲(chǔ)了符合條件的列表
    '''
    if'>'in con: # 判斷傳入的con=age>22存在'>'
        selected_lst=filter_handler('>',con) #14. 調(diào)用前面的函數(shù)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給調(diào)用的地方#12那里

def get_show_lst(col_codition): #5.’select name,age‘被傳進(jìn)來(lái)了
    '''
    獲取要展示的列名
    :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. 此時(shí)col_info_lst=[’name,age‘]
        col_info=col_info_lst[0].strip() #8. 此時(shí)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']給調(diào)用的地方即#4那里
        else:print(col_info)


def show(selected_lst,show_lst): #28. 將#26生成的selected_lst=line_lst和#11生成的show_lst=[['name','age']]傳入
    '''
    展示符合條件的的內(nèi)容
    :param selected_lst:符合條件的行的列表
    :param show_lst:所有要展示的字段
    :return:None
    '''
    for selected_item in selected_lst: #29.循環(huán)所有符合條件的行的列表
        for col in show_lst:#30. 循環(huán)根據(jù)用戶條件想要顯示的東西
            print(selected_item[colunm_dic[col]],end=' ')#31. 打印根據(jù)用戶條件而得到的最終結(jié)果
        print()

#從這里開始看: condition
=input('>>>') #1. 接收用戶的指令 #解析用戶的指令 ret=condition.split('where')#2. 按照where切割,切割后得到一個(gè)列表[假設(shè)拿到的是 'select name,age','一個(gè)條件:age>22'] con=ret[1].strip() #3. 去空格拿到的是’age>22‘ #根據(jù)select條件解析用戶需要展示的內(nèi)容 show_lst=get_show_lst(ret[0]) #4. 將參數(shù)’select name,age‘傳進(jìn)去上面的get_show_lst中 #11. 接收#10 返回來(lái)的值show_lst=[['name','age']] #根據(jù)where條件解析用篩選用戶想要查找的內(nèi)容 selected_lst=get_selected_line(con)#selected_lst中存儲(chǔ)了所有符合條件的內(nèi)容 #12. 將#3生成的用戶條件con=’age>22‘傳入并調(diào)用函數(shù)前面的get_selected_line() #26.接收#25返回的值selected_lst=line_lst #將符合條件的內(nèi)容按照用戶的需求展示出來(lái) show(selected_lst,show_lst) #27. 將#26生成的selected_lst=line_lst和#11生成的show_lst=[['name','age']]傳入show函數(shù)

上面的代碼,具體分析了每個(gè)函數(shù)所實(shí)現(xiàn)的功能,每一個(gè)參數(shù)代表的意義,如果要用戶輸入條件的時(shí)候,這樣:

>>>select name,age where age>22

額。。由于沒有那個(gè)員工信息表,運(yùn)行的最終結(jié)果不能夠顯示,不過(guò)大致的代碼框架基本如上面的代碼,里面的參數(shù)和一些定義,可以根據(jù)實(shí)際情況改變,

四個(gè)函數(shù)以及對(duì)應(yīng)的功能:

(1)def get_show_lst(col_codition):
獲取要展示的列名
:param col_condition:用戶輸入的select條件
:return:列名組成的字典

(2)def get_selected_line(con):
獲取所有要查找的行,并將每一行作為一個(gè)列表項(xiàng)存儲(chǔ)在selected_lst中
:return:存儲(chǔ)了符合條件的列表

(3)def filter_handler(operate,con):
進(jìn)行篩選工作
:operate:用戶要進(jìn)行的操作是>/</=/like
:con:用戶輸入的where條件
return:被選中的所有行組成的列表,其中每一行都是一個(gè)列素

(4)def show(selected_lst,show_lst):
展示符合條件的的內(nèi)容
:param selected_lst:符合條件的行的列表
:param show_lst:所有要展示的字段
:return:None
 來(lái)源:http://www./content-4-184851.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多