我想将不同行上的no值更改为yes。我不知道如何做到这一点,而不覆盖整个文件。这个问题是我的Capstone项目的一部分。
问:当用户选择'vm'查看分配给他们的所有任务时,添加以下功能:o以易于阅读的方式显示所有任务。确保每个任务都显示有相应的编号,可用于识别任务。o允许用户选择特定任务(通过输入数字)或输入“-1”返回主菜单。◦如果用户选择特定任务,则他们应当能够选择将任务标记为完成或编辑任务。如果用户选择将任务标记为完成,则描述任务是否已完成的“是”/“否”值应更改为“是”。当用户选择编辑任务时,可以编辑任务所分配给的人员的用户名或任务的到期日。只有在任务尚未完成时才能对其进行编辑。
任何建议将不胜感激!
到目前为止的代码:
def view_mine():
f = open("tasks.txt", "r").readlines()
for index, value in enumerate(f, 1):
v = value.split(", ")
print(f"Task Number: {index}")
print(f"Task : {v[1]} \nAssigned to : {v[0]} \nDate Assigned : {v[3]} \nDue Date : {v[4]} \nTask Complete? {v[5]} \nTask Description : {v[2]} \n")
select_task = int(input("Please enter the Task Number of the Task you would like to edit:"))
if select_task in range(1, select_task + 1):
choice = input('''Please enter an edit option:
c - Complete
e - Edit
0 - Exit
:''').lower()
if choice == "0":
return
elif choice == "c":
f = open("tasks.txt", "r").readlines()
for line in f:
if "No" in line:
oriline = line
newline = line.replace("No","Yes")
elif "Yes" in line:
print("This task is completed and cannot be edited.")
f = open("tasks.txt", "r").read()
filedata = f.replace(oriline, newline)
f = open("tasks.txt", "w")
f.write(filedata)
print("The Task has been marked to completed.")
字符串
1条答案
按热度按时间erhoui1w1#
忽略用户输入,下面是实现核心功能的方法:
字符串
打开文件并读取所有行。枚举行。对于包含“否”的任何行,替换为“是”,更新行列表。对于任何包含“是”的行,打印一条消息。
查找到文件的开头。重写所有行。
如果没有进行任何更改(即“No”从未被替换为“Yes”),则可以使用布尔标志来指示此类更改,从而避免重写文件以获得最佳性能。
注意:如果您将'Yes'替换为'No',则需要在关闭(退出上下文管理器)之前调用file.truncate(),因为文件可能变小了。在这种情况下,文件只能变得更大,所以file.truncate()是不相关的