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

how to delete a line from a txt file using python?

我有一个包含学生姓名、地址、成绩等数据的文件。我创建了一个函数,可以根据学生的名字和姓氏从文本文件中删除整行。此功能工作正常。然而,后来,我决定更新它,这样如果用户输入了一个不在文件中的名字,它就会打印:Student not found。但是,现在即使用户键入文件中的名称,它仍会打印:student not found...

这是我的代码:

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")

谁能给我解释一下为什么?

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

我不理解的地方(如果我错了请纠正我),我想你的逻辑有两个问题。

  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 ... 将始终 return 为真,因为 x 计算结果为真。

  1. 如果你想检查学生是否不在整个文件中,我认为你不应该对你阅读的每一行都进行测试。由于您不知道学生可能在哪一行,也许您可​​以重新组织代码以先处理整个文件,然后再测试是否找不到学生。

如果您想使用您的功能并在其中搜索(您不想更改您的功能),您可以将您的数据放在一个列表中并在该列表中搜索,如下代码所示:

list=['f_Name = Lorem','l_Name = Ipsum']

if "f_Name = "+x in list or "l_Name = "+y in list:
    print("True")

else:
    print("Student Not Found")