【问题标题】:how to delete a line from a txt file using python?如何使用python从txt文件中删除一行?
【发布时间】:2020-03-30 12:34:27
【问题描述】:

我有一个文件,其中包含学生的姓名、地址、成绩等数据。我创建了一个函数,可以根据学生的名字和姓氏从文本文件中删除整行。此功能正常工作。然而,之后,我决定更新它,如果用户输入的名称不在文件中,它会打印:找不到学生。但是,现在即使用户输入文件中的名称,它仍然会打印: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")

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

【问题讨论】:

  • ``!=` 检查它是否不同。你想使用'=='
  • 使用if not (t[0]==x and t[1]==y):if t[0]!=x or t[1]!=y:

标签: python text-files delete-row


【解决方案1】:

对于我没有理解的(如果我错了,请纠正我),我猜你的逻辑有两个问题。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        • 1970-01-01
        • 2021-05-11
        相关资源
        最近更新 更多