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



所以我有一个带有ID,学生姓名和其他属性的txt文件。我被要求通过要求用户只输入他们的ID或他们的名字来为用户提供从文件中删除学生的选项。什么好主意吗?

ID    Name

。("102","迈克尔•杰克逊","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-IDt2-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

项目基本完成。您只需要创建一个函数来保存文件。

的评论:

  • getlist重命名为load_records。"get"是指直接的事物;"load"就是你拿新东西的时候。重命名"list";records"(或"瞳孔"或"db"),因为它更具描述性(将变量命名为"列表"(不管怎样,这都不是一个好主意,因为它是一个内置函数的名称)。

  • a,b,z重命名为name,id

  • 也有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

(更有经验的程序员会把这个函数写成:

)
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)的代码移到单独的函数中。

相关内容

  • 没有找到相关文章

最新更新