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

读取txt文件中任务截止日期并与当前日期校验判断是否逾期

问题:统计tasks.txt中的逾期任务数量

我是编程初学者,若问题简单还请见谅,感谢您的帮助。我需要读取tasks.txt文件中的任务截止日期(对应格式里的第4个字段,split后索引为3),并与当前日期对比判断任务是否逾期。

tasks.txt文件内容

格式说明:任务分配用户;任务内容;任务描述;截止日期;添加日期;是否完成

sam;needs doing;now;2004-04-12;2024-03-05;No
sam;please do;gym;2024-05-20;2024-03-05;No
admin;do;sd;2004-12-12;2024-03-05;No
dam;dam;dam;2024-12-12;2024-03-05;No

现有代码

elif menu == 'gr':
            
    # creating dictionary with values for task_overview file
    stat_dict_task_overview = {
        "Tasks": 0,
        "Completed": 0,
        "Uncompleted": 0,
        "Overdue": 0,
        "Percentage Incomplete": 0,
        "Percentage Overdue": 0
    }
    
    # creating dictionary with values for user_overview file
    stat_dict_user_overview = {
        "Users": 0,
        "Tasks": 0,
        "Name": 0,
    }
    
     # open tasks.txt as read
    tasks = open("tasks.txt", "r")
    
    # Split contents task.txt by ';'
    for count, line in enumerate(tasks):
        split_by_semi = line.split(';')           
        
        # unpack elements in task.txt into corresponding variables
        user = split_by_semi[0]
        how_many_tasks = split_by_semi[1]
        description_task = split_by_semi[2]
        due_date = split_by_semi[3]
        date_added = split_by_semi[4] 
        completed = split_by_semi[5]
        
    # Add 1 to "Tasks" for each line   
    stat_dict_task_overview["Tasks"] += count + 1
    
    # Add 1 to "Completed if "Yes" 
    if[5] == "Yes": 
        stat_dict_task_overview["Completed"] += count + 1
    # Else add 1 to "Uncompleted"
    else: 
        stat_dict_task_overview["Uncompleted"] += count + 1

    # Code stuck on needs to check todays date against due date and add 1 if overdue      
    if[3] < datetime.today().date():
        stat_dict_task_overview["Overdue"] += count + 1
    
    # Print results for my ongoing review
    print(stat_dict_task_overview)

问题卡点

目前卡在截止日期与当前日期的校验部分,无法正确统计逾期任务数量。


解决方案

你的代码存在几个核心问题:

  1. 统计逻辑都写在循环外部,导致仅处理了最后一行任务数据
  2. 直接用字符串格式的日期和date对象对比,类型不匹配无法正确判断
  3. 存在语法错误(if[5]写法不合法),且未区分已完成/未完成任务的逾期判断逻辑

以下是修正后的完整代码:

from datetime import datetime  # 必须导入datetime模块

elif menu == 'gr':
    stat_dict_task_overview = {
        "Tasks": 0,
        "Completed": 0,
        "Uncompleted": 0,
        "Overdue": 0,
        "Percentage Incomplete": 0,
        "Percentage Overdue": 0
    }
    
    stat_dict_user_overview = {
        "Users": 0,
        "Tasks": 0,
        "Name": 0,
    }
    
    # 用with语句自动管理文件关闭,避免资源泄漏
    with open("tasks.txt", "r") as tasks:
        for line in tasks:
            line = line.strip()
            if not line:  # 跳过空行
                continue
                
            split_by_semi = line.split(';')           
            user = split_by_semi[0]
            task_content = split_by_semi[1]
            task_desc = split_by_semi[2]
            due_date_str = split_by_semi[3]
            date_added_str = split_by_semi[4] 
            completed = split_by_semi[5].strip()  # 去除字段多余空格
            
            # 统计总任务数
            stat_dict_task_overview["Tasks"] += 1
            
            # 统计完成/未完成任务
            if completed == "Yes":
                stat_dict_task_overview["Completed"] += 1
            else:
                stat_dict_task_overview["Uncompleted"] += 1
                
                # 仅未完成任务需要判断逾期
                due_date = datetime.strptime(due_date_str, "%Y-%m-%d").date()
                today = datetime.today().date()
                
                if due_date < today:
                    stat_dict_task_overview["Overdue"] += 1
    
    # 计算百分比,避免总任务数为0时除以0报错
    total_tasks = stat_dict_task_overview["Tasks"]
    if total_tasks > 0:
        stat_dict_task_overview["Percentage Incomplete"] = round((stat_dict_task_overview["Uncompleted"] / total_tasks) * 100, 2)
        stat_dict_task_overview["Percentage Overdue"] = round((stat_dict_task_overview["Overdue"] / total_tasks) * 100, 2)
    
    print(stat_dict_task_overview)

关键修正说明:

  • 统计逻辑移至循环内部:每读取一条任务就完成一次统计,确保所有任务都被处理
  • 日期类型转换:用datetime.strptime()将字符串日期转为date对象,才能和当前日期做比较
  • 逾期判断规则:只有未完成的任务才计入逾期统计,符合实际业务逻辑
  • 文件管理优化:使用with语句自动关闭文件,代码更安全
  • 空白处理:用strip()清理字段多余空格,避免判断出错
  • 百分比计算:补全字典中百分比字段的逻辑,同时处理了总任务数为0的边界情况

内容的提问来源于stack exchange,提问作者SamWestlake-Cann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:05:14