Python未完成名单统计 TXT文件版

背景

学校经常需要统计教师在信息化平台上的执行和完成情况,由于教师比较多,需要筛选出未完成的教师用于提醒其尽快完成。

有全校教师名单和已完成的教师名单,但是其中的顺序是乱的,手动筛选出未完成的名单比较困难。借助Python中的集合功能能很好地完成。

import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import os
import re

class TxtTeacherChecker:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("教师任务完成统计工具 TXT版")
        self.root.geometry("600x400")
        self.create_widgets()
        
    def create_widgets(self):
        # 文件选择区域
        ttk.Label(self.root, text="全部教师名单:").grid(row=0, column=0, padx=10, pady=5)
        self.entry_all = ttk.Entry(self.root, width=50)
        self.entry_all.grid(row=0, column=1)
        ttk.Button(self.root, text="浏览", command=lambda: self.select_file(self.entry_all, "*.txt")).grid(row=0, column=2)

        ttk.Label(self.root, text="已完成名单:").grid(row=1, column=0)
        self.entry_done = ttk.Entry(self.root, width=50)
        self.entry_done.grid(row=1, column=1)
        ttk.Button(self.root, text="浏览", command=lambda: self.select_file(self.entry_done, "*.txt")).grid(row=1, column=2)

        # 操作按钮
        ttk.Button(self.root, text="开始筛选", command=self.process_files).grid(row=2, column=1, pady=10)
        
        # 日志显示
        self.log_text = tk.Text(self.root, height=10, width=70)
        self.log_text.grid(row=3, column=0, columnspan=3, padx=10, pady=5)
        self.log_text.insert(tk.END, "操作日志:\n")

    def select_file(self, entry, filetype):
        filepath = filedialog.askopenfilename(
            title="选择文本文件",
            filetypes=[("文本文件", filetype), ("所有文件", "*.*")]
        )
        entry.delete(0, tk.END)
        entry.insert(0, filepath)

    def process_files(self):
        try:
            # 读取文件 
            all_teachers = self.read_txt(self.entry_all.get())
            done_teachers = self.read_txt(self.entry_done.get())
            
            # 数据清洗(去除所有空格)
            all_set = {name.replace(" ", "") for name in all_teachers if name.strip()}
            done_set = {name.replace(" ", "") for name in done_teachers if name.strip()}
            
            # 筛选未完成名单
            undone = sorted(all_set - done_set)
            
            # 导出结果 
            output_path = os.path.join(os.path.dirname(self.entry_all.get()), "未完成名单.txt")
            with open(output_path, 'w', encoding='utf-8') as f:
                f.write("".join(undone))
            
            # 显示日志 
            self.log_text.insert(tk.END, 
                f"处理成功!\n"
                f"全部教师人数:{len(all_set)}\n"
                f"已完成人数:{len(done_set)}\n"
                f"未完成人数:{len(undone)}\n"
            )
            messagebox.showinfo("完成", f"结果已保存至:\n{output_path}")
            
        except Exception as e:
            messagebox.showerror("错误", f"处理失败:{str(e)}")
            self.log_text.insert(tk.END, f"错误:{str(e)}\n")

    def read_txt(self, path):
        """读取TXT文件并返回列表"""
        if not os.path.exists(path):
            raise FileNotFoundError(f"文件不存在:{path}")
            
        with open(path, 'r', encoding='utf-8') as f:
            return f.readlines()

if __name__ == "__main__":
    app = TxtTeacherChecker()
    app.root.mainloop()

打包成exe

pyinstaller -w -F -i  your.ico  TeacherCheckTool.py

 

posted on 2025-04-08 09:01  我来乔23  阅读(28)  评论(0)    收藏  举报

导航