如何使用python从txt文件中删除一行?

问题描述 投票:-1回答:2

我有一个文件,其中包含有关学生的数据,例如他们的姓名,地址,年级等。我创建了一个函数,该函数将根据学生的名字和姓氏从文本文件中删除整行。此功能正常工作。但是,此后,我决定更新它,以便如果用户输入的名称不在文件中,则它将打印:找不到学生。但是,即使现在,即使用户键入文件中的名称,它仍会打印:找不到学生...

这是我的代码:

def delete_a_record(filename):

    x=input("Remove First Name:")
    y=input("Remove Last Name:")

    with open(filename, "r") as f:
        lines = f.readlines()
    with open(filename, "w") as f:
        for i in lines:
            t=i.split()
            if t[0]!=x and t[1]!=y:
                f.write(i)
            elif x or y not in t:
                print("Student Not Found")




    f.close()
delete_a_record("mytextfile.txt")

有人可以向我解释为什么吗?

python text-files delete-row
2个回答
0
投票

[可能是因为您正在逐行进行迭代,所以即使名称每次都与当前行都不匹配都在.txt文件中,它也会打印“ Student Not Found”。您需要重写您的函数,以便仅在行已用完且未找到名称时才执行打印语句。


0
投票

关于我不了解的问题(如果我错了,请纠正我),我想您的逻辑中有两个问题。

  1. 如果要测试xy都不在t中,则应单独测试,例如:
if t[0]!=x and t[1]!=y:
    f.write(i)
elif x not in t and y not in t:
    print("Student Not Found")

现在的方式,如果x不为None,则条件elif x or ...将始终返回true,因为x的值为True。

  1. 如果您要检查学生是否不在整个文件中,我认为您不应该针对阅读的每一行进行测试。由于您不知道学生可能在哪一行,因此也许可以在测试是否找到学生之前重新组织代码以首先处理整个文件。
© www.soinside.com 2019 - 2024. All rights reserved.