Python 代碼實現模糊查詢


一、概述

最近在做一個django項目,里面有一個字典數據非常大,雖然已經做了分頁處理。但是用戶想要找到指定的數據,還得一頁頁翻,非常繁瑣。

字典的結構如下:

file_list = [
    {
        "type": "dir",
        "size": "123",
        "name": "access.log",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "access.log.gz",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "error.log",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "access-auth.log",
    },
]

 

當我輸入關鍵字access時,需要出現3個結果。

['access-auth.log', 'access.log', 'access.log.gz']

 

二、代碼實現

完整代碼如下:

test.py

import re

file_list = [
    {
        "type": "dir",
        "size": "123",
        "name": "access.log",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "access.log.gz",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "error.log",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "access-auth.log",
    },
]


def fuzzy_finder(key, data):
    """
    模糊查找器
    :param key: 關鍵字
    :param data: 數據
    :return: list
    """
    # 結果列表
    suggestions = []
    # 非貪婪匹配,轉換 'djm' 為 'd.*?j.*?m'
    # pattern = '.*?'.join(key)
    pattern = '.*%s.*'%(key)
    # print("pattern",pattern)
    # 編譯正則表達式
    regex = re.compile(pattern)
    for item in data:
        # print("item",item['name'])
        # 檢查當前項是否與regex匹配。
        match = regex.search(item['name'])
        if match:
            # 如果匹配,就添加到列表中
            suggestions.append(item)

    return suggestions

# 搜索關鍵字
keys = "access"
result = fuzzy_finder(keys,file_list)
print(result)
View Code

 

執行輸出:

[{'type': 'dir', 'size': '123', 'name': 'access.log'}, {'type': 'dir', 'size': '123', 'name': 'access.log.gz'}, {'type': 'dir', 'size': '123', 'name': 'access-auth.log'}]

 

 

本文參考鏈接:

https://www.cnblogs.com/weiman3389/p/6047017.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM