天天看點

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)           

複制

執行輸出:

[{'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