如何让Python在前一行中的值匹配时跳过读取.txt文件中的一行

如何让Python在前一行中的值匹配时跳过读取.txt文件中的一行,python,Python,我是一名学校管理员,试图编写一个简单的计划,帮助我们确定学生的计划结束日期是否已过期,是否需要续期。下面是Python将读取的.txt文件示例(假学生数据和FERPA safe) 前9位是学生编号。所以前两行是同一个学生。第三行是另一个学生。星号后的8位数字是程序到期日期。因此,由于第一个学生的当前程序尚未过期,因此第二行与此无关,我需要Python忽略它(因为该学生的程序已经更新),然后转到下一个学生 我正在努力告诉Python“如果你看到与前一行相同的学生号,请跳过它并阅读下一行”。非常感谢

我是一名学校管理员,试图编写一个简单的计划,帮助我们确定学生的计划结束日期是否已过期,是否需要续期。下面是Python将读取的.txt文件示例(假学生数据和FERPA safe)

前9位是学生编号。所以前两行是同一个学生。第三行是另一个学生。星号后的8位数字是程序到期日期。因此,由于第一个学生的当前程序尚未过期,因此第二行与此无关,我需要Python忽略它(因为该学生的程序已经更新),然后转到下一个学生

我正在努力告诉Python“如果你看到与前一行相同的学生号,请跳过它并阅读下一行”。非常感谢您的指导

如果您的学生名单未按截止日期排序,则更可靠的解决方案是:

  • 将学生信息映射到其最新到期日
  • 检查映射并更新相关条目
  • 注意,为了简单起见,我将日期保留为字符串

    TODAY = "20210415"
    
    with open(“your_file.txt”, “r”) as f:
        student_number_to_latest_expiry_date = {}
        for line in f:
            student_number = line[:9]
            expiry_date = line[-12:-4]
            existing_expiry_date = student_number_to_latest_expiry_date.get(student_number, None)
            if existing_expiry_date is None or expiry_date > existing_expiry_date:
                student_number_to_latest_expiry_date[student_number] = expiry_date
    
        for student_number, expiry_date in student_number_to_latest_expiry_date.items():
            if expiry_date < TODAY:
                print(f"need to renew for student #{student_number}")
    
    TODAY=“20210415”
    打开(“your_file.txt”、“r”)作为f:
    学生编号至最近到期日期={}
    对于f中的行:
    学生编号=第[:9]行
    到期日=第[-12:-4]行
    现有到期日=学生号到最新到期日。获取(学生号,无)
    如果现有到期日为无或到期日>现有到期日:
    学生号到最近的到期日[学生号]=到期日
    对于学生号,学生号中的到期日至最新到期日。项()
    如果到期日<今天:
    打印(f“学生#{学生_编号}需要续订”)
    
    这太完美了!!尝试了这个,它的工作完美无瑕。这将对我们非常有帮助,并帮助我们确保学生课程不会出现漏洞,导致学生错过重要的教育服务。太感谢你了!!更新:所以我们今天使用这个程序,它大约有95%的有效性。这个.txt中有数百行。文件中,我了解到偶尔会出现异常情况,即行未按过期日期顺序排序。因此,如果您可以想象,example.txt文件中的前两行是颠倒的。这段代码将那些学生隔离为有过期程序,而实际上没有。是否有办法调整此代码以适应这些异常情况?请参阅更新的代码段-首先查找每个学生的最新到期日,然后筛选出需要更新其程序的学生。就是这样!该计划正在像一个魅力现在!很难表达我对你的帮助的感激之情。非常感谢。
    TODAY = "20210415"
    
    with open(“your_file.txt”, “r”) as f:
        student_number_to_latest_expiry_date = {}
        for line in f:
            student_number = line[:9]
            expiry_date = line[-12:-4]
            existing_expiry_date = student_number_to_latest_expiry_date.get(student_number, None)
            if existing_expiry_date is None or expiry_date > existing_expiry_date:
                student_number_to_latest_expiry_date[student_number] = expiry_date
    
        for student_number, expiry_date in student_number_to_latest_expiry_date.items():
            if expiry_date < TODAY:
                print(f"need to renew for student #{student_number}")