You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现txt文件用户任务分组统计的模块化方案咨询

模块化实现方案

核心解决思路是放弃硬编码用户列表的写法,用*字典(键值对结构)*作为动态统计容器,不需要提前预知用户名单,遍历任务数据时遇到新用户就自动初始化对应统计项,从根本上适配新增用户的场景。

核心实现逻辑

  • 统一日期格式转换:把txt里字符串格式的到期日转成可比较的日期对象,用于逾期判断
  • 动态初始化统计项:以用户名为字典键,值为存储「总任务数/已完成数/逾期数」的统计对象,遍历到未记录的新用户时,自动创建初始值为0的统计条目
  • 逐行更新计数:遍历每条任务时,对应用户的统计值累加,不需要提前做用户匹配
  • 自动输出结果:遍历完成后字典中自动包含所有用户的完整统计数据,直接写入输出文件即可

修正后完整代码

from datetime import datetime

# 日期格式配置,和txt内的格式对应
DUE_DATE_FORMAT = "%d/%b/%Y"

if __name__ == "__main__":
    user_stats = {}
    total_tasks = 0
    today = datetime.today()

    # 读取任务文件逐行处理
    with open('tasks.txt', 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            # 拆分任务字段
            split_task = [item.strip() for item in line.split(",")]
            user_name, _, _, due_date_str, _, completed = split_task
            
            # 新用户自动初始化统计项
            if user_name not in user_stats:
                user_stats[user_name] = {
                    "total": 0,
                    "completed": 0,
                    "overdue": 0
                }
            
            # 统计值更新
            total_tasks += 1
            user_stats[user_name]["total"] += 1
            if completed.lower() == "yes":
                user_stats[user_name]["completed"] += 1
            else:
                # 未完成任务判断是否逾期
                due_date = datetime.strptime(due_date_str, DUE_DATE_FORMAT)
                if due_date < today:
                    user_stats[user_name]["overdue"] += 1

    # 写入统计结果
    with open('user_overview.txt', 'w', encoding='utf-8') as user_ov:
        user_ov.write(f"总用户数:{len(user_stats)}\n")
        user_ov.write(f"总任务数:{total_tasks}\n\n")
        user_ov.write("=== 各用户任务统计 ===\n")
        for user, stats in user_stats.items():
            user_ov.write(f"\n用户:{user}\n")
            user_ov.write(f"分配任务总量:{stats['total']}\n")
            user_ov.write(f"已完成任务数:{stats['completed']}\n")
            user_ov.write(f"逾期任务数:{stats['overdue']}\n")

原有代码问题说明

  • 存在变量名笔误:split_task_cont为拼写错误,实际拆分后的列表变量为split_task
  • 循环逻辑混乱:内层循环将user_name重置为空列表,完全无法实现用户匹配
  • 核心变量未定义:file_content/length_user/length_task均无赋值逻辑,运行会直接报错
  • 文件操作未做资源释放:直接用open()打开文件未手动关闭,容易出现文件占用问题

内容的提问来源于stack exchange,提问作者Tdog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:01:05