运行Fuzzywuzzy字符串匹配脚本未生成输出文件问题求助
字符串匹配脚本未生成输出文件的排查与修复思路
我最近写了一个字符串匹配的脚本,预期是从testfile读取字符串,和masterfile里的内容做模糊匹配,最后把匹配结果输出到指定文件,但运行后压根没生成输出文件。先贴一下我的部分代码:
# -*- coding: utf-8 -*- """ Test - String matching """ #%% from fuzzywuzzy import process import pandas as pd import os #%% def StringMatch (master, testfile, num_match=3): master_names = master.iloc[:,3] test_names = testfile.iloc[:,0] fhp_new = [process.extract(x, mas...
针对这个问题,我梳理了几个最可能的原因和对应的修复方案:
核心逻辑未完成/缺失文件写入步骤:你贴的代码里
process.extract(x, mas...明显是截断状态,而且整个StringMatch函数没有后续将匹配结果写入文件的逻辑,甚至可能没调用这个函数执行完整流程。这是最常见的“没输出文件”原因——代码只处理了匹配,没把结果落地。补全示例:
# 补全完整的匹配与保存逻辑 def StringMatch(master, testfile, num_match=3, output_path="match_result.csv"): master_names = master.iloc[:,3] test_names = testfile.iloc[:,0] # 补全extract的完整调用,遍历所有测试字符串 fhp_new = [process.extract(x, master_names, limit=num_match) for x in test_names] # 把结果转成结构化的DataFrame,方便后续查看和保存 result_data = [] for test_name, matches in zip(test_names, fhp_new): for match_name, score in matches: result_data.append({"测试字符串": test_name, "匹配字符串": match_name, "匹配得分": score}) result_df = pd.DataFrame(result_data) # 写入指定文件 result_df.to_csv(output_path, encoding="utf-8", index=False) print(f"匹配结果已保存至 {output_path}") return result_df # 必须调用函数才能执行逻辑! if __name__ == "__main__": # 先读取输入文件(根据你的实际文件格式调整,比如excel用read_excel) master_df = pd.read_csv("masterfile.csv") test_df = pd.read_csv("testfile.csv") # 执行匹配并指定输出路径 StringMatch(master_df, test_df, output_path="my_match_result.csv")输出路径异常:如果代码里指定了输出路径,但路径不存在、权限不足,或者路径写错了,都会导致文件生成失败(甚至可能没报错提示)。
修复建议:提前检查并创建输出目录,用可靠的路径拼接方式:
output_dir = "./match_results" # 若输出目录不存在则创建 if not os.path.exists(output_dir): os.makedirs(output_dir) # 拼接完整路径 full_output_path = os.path.join(output_dir, "result.csv") result_df.to_csv(full_output_path, encoding="utf-8", index=False)运行时异常未捕获:脚本可能在执行过程中抛出了异常(比如文件读取失败、fuzzywuzzy依赖缺失——比如没装
python-Levenshtein导致报错),但因为没有异常处理,程序直接终止,根本没走到保存文件的步骤。修复建议:加上异常捕获,打印错误信息快速定位问题:
if __name__ == "__main__": try: master_df = pd.read_csv("masterfile.csv") test_df = pd.read_csv("testfile.csv") StringMatch(master_df, test_df) except Exception as e: print(f"脚本运行出错:{str(e)}")
内容的提问来源于stack exchange,提问作者isic5
相关产品推荐
相关产品推荐

