python-3.x 我想删除文本文件中的一行,方法是要求用户在该行中输入一个属性以删除该行

eqqqjvef  于 2022-12-15  发布在  Python
关注(0)|答案(1)|浏览(136)

我有一个包含ID、学生名和其他属性的txt文件。我被要求给予用户选择从文件中删除学生名,方法是只要求他们输入ID或姓名。有什么想法吗?

ID    Name

例如[“102”、“迈克尔·Jackson”、“3”、“54”、“30”、“84”]

def getlist():
    fp = open("student.txt", "r")
    list = fp.readlines()
    for i in range(len(list)):
        list[i] = list[i].split(";")
    return list

print("removing Students from the class based on")
        print("1-ID\t2-Student Name")
        fp=open("student.txt","r")
        
        list = getlist()
        c=int(input("Enter your choice:"))
        if(c==1):
            a=int(input("Enter the ID to remove:"))
            for i in range(1,len(list)):
                    if a==int(list[i][0]):
                        list.remove(list[i])
        else:
            b=input("Enter the Student name to remove")
            print("Records found under the name"+"("+b+")")
            for i in range(len(list)):
                if b==list[i][1]:
                    print(list[i],end=" ")
                    print("\n")

            ####this is for students with the same name
            z=int(input("Please select which record ID to remove:"))    
            
            for i in range(1,len(list)):
                #print(i)
                if z==int(list[i][0]):
                    list.remove(list[i])
                    break
ecbunoof

ecbunoof1#

你的项目几乎完成了。你只需要创建一个函数来保存文件。
备注:

  • getlist重命名为load_records。“get”表示立即执行的操作;“load”表示重新获取某个东西,将“list”重命名为“records”(或“pupuls”,或“db”),因为它更具描述性(在Python中,将变量命名为“list”并不是一个好主意,因为它是内置函数的名称)。
  • abz重命名为nameid
  • 也有save_records
  • 如果可以,尽量不要使用for i in range(len(list))样式。

例如,代替:

list = fp.readlines()
for i in range(len(list)):
    list[i] = list[i].split(";")
return list

执行:

list = []
for line in fp:
    list.append(line.split(';'))
return list

(More有经验的程序员会将该函数写成:

def load_records():
    with open("student.txt") as f:
        return [ line.split(';') for line in f ]

  • 同样,代替:
for i in range(len(list)):
          if b==list[i][1]:
              print(list[i],end=" ")
              print("\n")

执行:

for rec in records:
            if b == rec[1]:
                print(rec, end=" ")
                print("\n")

(有经验的程序员只会写print([ rec for rec in records if rec[1] == b ])。)

  • 你复制了删除记录的代码。这不太好。把删除记录的代码(按ID)移到一个单独的函数中。

相关问题