Python实现CSV精准搜索(含Tkinter交互)功能求助
修正后的CSV精准搜索工具代码
以下是符合需求的可运行代码,实现了精准匹配(完全相等才会命中)、Tkinter交互界面,以及无匹配时的弹窗提示:
import csv import tkinter as tk from tkinter import messagebox, ttk def search_csv(): # 获取输入的搜索关键词,去除首尾空格 keyword = entry.get().strip() if not keyword: messagebox.showwarning("提示", "请输入搜索关键词") return # 清空结果显示区域 result_text.delete(1.0, tk.END) matched = False # 读取CSV文件(替换为你的实际文件路径) try: with open("your_file.csv", mode="r", encoding="utf-8") as file: reader = csv.reader(file) # 读取并显示表头(无表头可删除下方两行) header = next(reader) result_text.insert(tk.END, "\t".join(header) + "\n") result_text.insert(tk.END, "-"*50 + "\n") # 遍历行,精准匹配第一列(需搜索其他列可修改row[0]的索引,如row[1]对应第二列) for row in reader: if len(row) >= 1 and row[0] == keyword: result_text.insert(tk.END, "\t".join(row) + "\n") matched = True if not matched: messagebox.info("搜索结果", "未找到匹配的记录") except FileNotFoundError: messagebox.showerror("错误", "未找到指定的CSV文件") except Exception as e: messagebox.showerror("错误", f"发生未知错误:{str(e)}") # 创建主窗口 root = tk.Tk() root.title("CSV精准搜索工具") root.geometry("600x400") # 输入区域布局 frame_input = ttk.Frame(root, padding="10") frame_input.pack(fill=tk.X) ttk.Label(frame_input, text="精准搜索关键词:").pack(side=tk.LEFT, padx=5) entry = ttk.Entry(frame_input, width=30) entry.pack(side=tk.LEFT, padx=5) search_btn = ttk.Button(frame_input, text="搜索", command=search_csv) search_btn.pack(side=tk.LEFT, padx=5) # 结果显示区域布局 frame_result = ttk.Frame(root, padding="10") frame_result.pack(fill=tk.BOTH, expand=True) ttk.Label(frame_result, text="搜索结果:").pack(anchor=tk.W) result_text = tk.Text(frame_result, wrap=tk.WORD) scrollbar = ttk.Scrollbar(frame_result, orient=tk.VERTICAL, command=result_text.yview) result_text.configure(yscrollcommand=scrollbar.set) result_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) scrollbar.pack(side=tk.RIGHT, fill=tk.Y) # 启动主循环 root.mainloop()
关键修正与说明
- 精准匹配实现:用
row[0] == keyword替代模糊匹配的in操作符,确保只有内容完全相等的行才会被命中(比如搜索App不会匹配Applebaum) - GUI交互优化:用Tkinter的
Entry组件替代input(),添加空输入验证、滚动式结果显示区域,提升交互体验 - 错误处理:增加文件不存在、未知异常的捕获逻辑,避免程序直接崩溃
- 可定制调整:如需搜索其他列,修改
row[0]中的索引即可(索引从0开始,对应CSV的第1列)
使用注意事项
- 将代码中的
"your_file.csv"替换为你的实际CSV文件路径 - 如果CSV没有表头,删除读取表头的
header = next(reader)和对应插入代码即可 - 若CSV文件编码为
gbk等非utf-8格式,修改open函数的encoding参数为对应编码
内容的提问来源于stack exchange,提问作者user19851007
相关产品推荐
相关产品推荐

