当前位置: 首页 > 后端技术 > Python

pyhon简单实现json对值进行模糊搜索

时间:2023-03-26 17:21:41 Python

pyhon绠€鍗曞疄鐜癹son瀵瑰€艰繘琛屾ā绯婃悳绱⑩檧鈸库檧鎴戠粡甯镐娇鐢╦son杩涜瀛樺偍閰嶇疆锛屼簬鏄父甯搁亣鍒拌繖鏍风殑闂锛氬鏋滄兂瑕佸鏌愪釜鏁扮粍閲岀殑鍊艰繘琛屾ā绯婃悳绱紝鍚屾椂杈撳嚭鐩稿叧鐨勫叾浠栨暟缁勭浉鍚屼綅缃殑鐨勫€艰濡備綍瀹炵幇鍛紵鎬濊矾浠e叆瀹為檯妗堜緥鏉ユ€濊€冧竴涓嬫垜鐨勮В娉曟暟鎹畕 "name": [ "鐢甸キ鐓茬増骞垮紡鑵婅偁鐓查キ", "鐢甸キ鐓茬儳楦?quot;, "鐢甸キ鐓茬剸闈?quot;], "ingredients": [ "鑵婅偁銆佺背", "楦¤倝銆佹磱钁便€佽弻鑿?quot;, "鐚倝銆侀潰椋?quot;], "url": [ "https://www.***.com/video/BV1NE411Q7Jj", "https://www.***.com/video/BV1T54y1U7Cu", "https://www.***.com/video/BV14b411q7rM" "https://www.***.com/video/BV1K441157rz"], "difficulty": [ "绠€鍗?quot;, "绠€鍗?quot;, "绠€鍗?quot;], "tag": [ "骞垮紡", "濂藉悆", "鍋ュ悍椁?quot;], "practice": [ "鐐?quot;, "鐑?quot;, "钂?quot; ""], "tool": [ "鐢甸キ鐓?quot;, "鐢甸キ鐓?quot;, "鐢甸キ鐓?quot; ""]}杩欐槸涓€涓彍璋眏son銆傚亣濡傛垜鐜板湪琚殧绂诲湪瀹朵簡锛屾墜澶翠笂鍙湁闆舵槦鐨勯鏉愶紝鎴戞兂鏍规嵁鎵嬪ご涓婄殑椋熸潗鏉ョ湅鐪嬫垜閮借兘鍋氬嚭浠€涔堣彍銆傞偅涔堣繖璇ュ浣曞疄鐜板憿锛熻В娉曚竴鍋囧宸茬煡鎴戞墜涓婄殑椋熺墿鏈夌墰鑲夈€佹磱钁便€傞偅涔堟垜鍙互杩欐牱瀹炵幇閬嶅巻json锛岀劧鍚庡垎鍒垱寤烘暟缁勫彉閲忓瓨鍌╪ame銆乮ngredients銆乽rl銆乨ifficulty绛塲son鏁扮粍鍐呭閬嶅巻ingredients鏁扮粍锛屾ā绯婂尮閰嶆槸鍚︿笌鎴戞墜澶翠笂鐨勯鐗╀竴鑷村鏋滀竴鑷达紝灏嗘暟鎹姞鍏ユ柊鐨勬暟缁勪腑锛屽悓鏃舵妸鐩稿悓浣嶇疆鐨刵ame銆乽rl銆乨ifficulty绛塲son鏁扮粍鍐呭涔熷垎鍒姞鍏ユ柊鐨勬暟缁勪腑鍚屾椂杈撳嚭鍚勪釜鏁扮粍鐨勫唴瀹规樉鑰屾槗瑙侊紝杩欑瑙f硶澶憜浜嗭紝浜庢槸鎴戞兂杩樻湁鍝噷鍙互浼樺寲鍛紵瑙f硶浜屼簬鏄垜鍙堟兂鍒颁簡鍙︿竴绉嶅啓娉曞彧閬嶅巻涓€娆son骞跺瓨鍌紝鐒跺悗鍐嶅瓨鍌ㄤ竴缁勯渶瑕佹ā绯婂尮閰嶇殑鍐呭鏁扮粍(杩欎釜鍐呭鏁扮粍鍙互鏄綘鎯冲尮閰嶇殑浠讳綍鍊兼墍鍦ㄧ殑瀵瑰簲鏁扮粍锛屼緥濡傛兂妯$硦鍖归厤鑿滃悕锛屽氨鍙渶瑕佸瓨鍌╪ame鏁扮粍锛屾兂妯$硦鍖归厤椋熸潗锛屽氨鍙渶瑕佸瓨鍌╥ngredients鏁扮粍)妯$硦鍖归厤鏄惁涓庢垜鎵嬪ご涓婄殑椋熺墿涓€鑷村苟璁板綍涓嬩綅缃€氳繃浣嶇疆鍙栧叾浠栫浉鍏崇殑鍏朵粬鏁扮粍鐩稿悓浣嶇疆鐨勭殑鍊艰繖涓В娉曠殑鍏抽敭鍦ㄤ簬锛屽洜涓哄悇涓暟缁勭殑闀垮害鐩稿悓锛屾墍浠ヨ幏鍙栦竴娆′綅缃嵆鍙悓鏃剁煡閬撳叾浠栧搴旀暟鍊兼墍鍦ㄧ殑瀵瑰簲鏁扮粍涓殑浣嶇疆璇寸殑鏈夌偣缁曪紝鐩存帴涓婁唬鐮併€備唬鐮佸疄鐜伴鍏堝彇鑿滆氨鏁版嵁# 鍙栬彍璋眏sondef get_record(): url = "./menu.json" if not os.path.isfile(url): return "鑿滆氨鑾峰彇澶辫触" fo = open(url, "r", encoding='utf-8') ele_json = loads(fo.read()) return ele_json妯$硦鎼滅储瀹炵幇# 妯$硦鎼滅储def fuzzyfinder(user_input, collection_key_list): suggestions = [] pattern = '.*?'.join(user_input) # Converts 'djm' to 'd.*?j.*?m' regex = compile(pattern) # Compiles a regex. a = 0 for item in collection_key_list: match = regex.search(item) # Checks if the current item matches the regex. if match: suggestions.append(a) a = a + 1 return suggestionsuser_input 鍜?collection_key_list 鍒嗗埆琛ㄧず 鍏抽敭瀛?鍜?娆叉ā绯婂尮閰嶇殑鏁扮粍 suggestions鏁扮粍 瀛樺偍浜嗘ā绯婂尮閰嶄笂浜嗙殑鏁板€肩殑浣嶇疆鏈€鍚庢牴鎹疄闄呮儏鍐佃繘琛屾暟鎹彇鍑轰娇鐢ㄥ嵆鍙€傚湪鏈緥瀛愰噷锛屽氨鏄彇鍑鸿彍璋眃ef get_cook(key): # 杩涗竴姝ヨВ鏋愯祫婧恓son al_dict = get_record() collection_key = [] # 鐢ㄦ潵妯$硦鍖归厤鐨刱ey for b in al_dict['ingredients']: collection_key.append(b) fuzzyfinder_i_list = fuzzyfinder(key, collection_key) # 妯$硦鎼滅储璧勬簮 fuzzyfinder_i_len = len(fuzzyfinder_i_list) if fuzzyfinder_i_len > 0: if collection_key[fuzzyfinder_i_list[0]].replace("銆?quot;, "") == key.replace("銆?quot;, ""): return "".join([al_dict['name'][fuzzyfinder_i_list[0]], "涓?quot;, al_dict['ingredients'][fuzzyfinder_i_list[0]], "\nB绔欐暀绋婤V鍙凤細", al_dict['url'][fuzzyfinder_i_list[0]], "\n闅惧害锛?quot;, al_dict['difficulty'][fuzzyfinder_i_list[0]], "涓ㄦ爣绛撅細", al_dict['tag'][fuzzyfinder_i_list[0]], "\n鏂规硶锛?quot;, al_dict['practice'][fuzzyfinder_i_list[0]], "涓ㄥ伐鍏凤細", al_dict['tool'][fuzzyfinder_i_list[0]]]) elif collection_key[fuzzyfinder_i_list[fuzzyfinder_i_len - 1]].replace("銆?quot;, "") == key.replace("銆?quot;, ""): return "".join([al_dict['name'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "涓?quot;, al_dict['ingredients'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "\nB绔欐暀绋婤V鍙凤細", al_dict['url'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "\n闅惧害锛?quot;, al_dict['difficulty'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "涓ㄦ爣绛撅細", al_dict['tag'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "\n鏂规硶锛?quot;, al_dict['practice'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "涓ㄥ伐鍏凤細", al_dict['tool'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]]]) else: re_text = "鏈壘鍒扮簿鍑嗗叧閿瘝锛屾ā绯婃悳绱㈠埌浠ヤ笅鍐呭锛歕n" for c in fuzzyfinder_i_list: re_text = "".join( [re_text, al_dict['name'][c], "涓?quot;, al_dict['ingredients'][c], "\nB绔欐暀绋婤V鍙凤細", al_dict['url'][c], "\n闅惧害锛?quot;, al_dict['difficulty'][c], "涓ㄦ爣绛撅細", al_dict['tag'][c], "\n鏂规硶锛?quot;, al_dict['practice'][c], "涓ㄥ伐鍏凤細", al_dict['tool'][c], "\n"]) return re_text else: content = "".join(["鏈壘鍒?quot; + key + "鐩稿叧鑿滆氨"]) return content杩欎釜鍐欐硶鍙互鍚屾椂瑙e喅绮惧噯鍖归厤鍜屾ā绯婂尮閰嶉棶棰橈紝绮惧噯鍖归厤缁撴灉涓€鑸槸鏁扮粍绗竴涓垨鏈€鍚庝竴涓紝鎵€浠ュ彧闇€瑕佸垽鏂竴涓嬮灏炬槸鍚︿笌鍏抽敭瀛楃浉鍚屽嵆鍙粨鏋滄潵鐪嬩竴涓嬫晥鏋滅簿鍑嗗尮閰峣f __name__ == "__main__": print(get_cook("鑳¤悵鍗溿€佺墰鑲夈€佹磱钁?quot;))>>>鑳¤悵鍗滅倴鐗涜倝涓ㄨ儭钀濆崪銆佺墰鑲夈€佹磱钁?gt;>>B绔欐暀绋婤V鍙凤細https://www.***.com/video/BV1UR4y1V7nV>>>闅惧害锛氬洶闅句辅鏍囩锛氭硶寮?gt;>>鏂规硶锛氱倴涓ㄥ伐鍏凤細涓€鍙eぇ閿呮ā绯婂尮閰峣f __name__ == "__main__": print(get_cook("鐗涜倝銆佹磱钁?quot;))>>>鏈壘鍒扮簿鍑嗗叧閿瘝锛屾ā绯婃悳绱㈠埌浠ヤ笅鍐呭锛?gt;>>鐢甸キ鐓茬綏瀹嬫堡涓ㄧ墰鑲夈€佺暘鑼勩€佹磱钁便€佽姽鑿溿€佽儭钀濆崪銆佸湡璞嗐€佸嵎蹇冭彍>>>B绔欐暀绋婤V鍙凤細https://www.***.com/video/BV16Q4y1m7nU>>>闅惧害锛氱畝鍗曚辅鏍囩锛氭潅鐑?gt;>>鏂规硶锛氫辅宸ュ叿锛氱數楗叢>>>鑳¤悵鍗滅倴鐗涜倝涓ㄨ儭钀濆崪銆佺墰鑲夈€佹磱钁?gt;>>B绔欐暀绋婤V鍙凤細https://www.***.com/video/BV1UR4y1V7nV>>>闅惧害锛氬洶闅句辅鏍囩锛氭硶寮?gt;>>...闂瑙e喅婧愮爜涓庢暟鎹杩嶴tar娆㈣繋鈹?锝€鈭€麓)銉庝夯!github鍙傝€僘unYouJun/cook: 馃嵅 濂界殑锛屼粖澶╂垜浠潵鍋氳彍锛侀殧绂婚鐢ㄦ墜鍐屽ぇ鍏?/p>