day21 05 員工信息表

day21 05 員工信息表app

 

假設有一個員工信息表,裏面有每一個員工的名字,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函數

上面的代碼,具體分析了每一個函數所實現的功能,每個參數表明的意義,若是要用戶輸入條件的時候,這樣:spa

>>>select name,age where age>22

額。。因爲沒有那個員工信息表,運行的最終結果不可以顯示,不過大體的代碼框架基本如上面的代碼,裏面的參數和一些定義,能夠根據實際狀況改變,code

四個函數以及對應的功能:blog

 

(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
相關文章
相關標籤/搜索