code:
import difflib
import json
import os
# 示範用的資料
log_sensors = ["temperture", "humidy", "presure"] # 可能打錯的文字
rd_sensors = ["temperature", "humidity", "pressure", "voltage", "current"] # 正確的文字
# 建立空字典來存储匹配結果
matches = {}
# 對每個 log_sensors 中的項目尋找相似項
for sensor in log_sensors:
# 使用 difflib 尋找相似的文字
# n=5: 最多回傳5個匹配結果
# cutoff=0.6: 相似度閾值,0~1之間,越大要求越嚴格
match = difflib.get_close_matches(sensor, rd_sensors, n=5, cutoff=0.6)
# 如果找到匹配項,存入字典;沒找到則存入 None
if match:
matches[sensor] = match
else:
matches[sensor] = None
# 印出比對結果
print(f"原始文字: {sensor}")
print(f"相似項目: {match}")
print("-" * 30)
# 設定輸出路徑
# 假設目前在 /path/to/project
dirname = "/path/to/project"
dir_ex = os.path.join(dirname, "export")
path_ex = os.path.join(dir_ex, "similar.json")
# 建立輸出資料夾(如果不存在)
os.makedirs(dir_ex, exist_ok=True)
# 將結果寫入 JSON 檔案
with open(path_ex, "w", encoding="UTF-8") as f:
json.dump(matches, f, indent=4, ensure_ascii=False)
print(f"檔案已經輸出到\n{path_ex}")
輸出結果:
json:
這個程式的主要功能:
- 比對兩個列表中的相似文字
- 使用 difflib 進行模糊匹配
- 將結果整理成字典格式
- 輸出成易讀的 JSON 檔案
常用參數說明:
n
: 要返回的最大匹配數量cutoff
: 相似度閾值(0.6 表示需要 60% 相似)indent
: JSON 檔案的縮排格式ensure_ascii
: 設為 False 可正確處理中文
推薦hahow線上學習python: https://igrape.net/30afN