python 如何在外部文本文件中将“否”更改为“是”

kokeuurv  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(74)

我想将不同行上的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.")

字符串

erhoui1w

erhoui1w1#

忽略用户输入,下面是实现核心功能的方法:

def change_no_to_yes(filename: str):
    with open(filename, 'r+') as file:
        lines = file.readlines()
        for i, line in enumerate(lines):
            if 'No' in line:
                lines[i] = line.replace('No', 'Yes')
            elif 'Yes' in line:
                # somewhat pointless message as there's no context
                print('This task is completed and cannot be edited.')
        file.seek(0)
        file.writelines(lines)

字符串
打开文件并读取所有行。枚举行。对于包含“否”的任何行,替换为“是”,更新行列表。对于任何包含“是”的行,打印一条消息。
查找到文件的开头。重写所有行。
如果没有进行任何更改(即“No”从未被替换为“Yes”),则可以使用布尔标志来指示此类更改,从而避免重写文件以获得最佳性能。
注意:如果您将'Yes'替换为'No',则需要在关闭(退出上下文管理器)之前调用file.truncate(),因为文件可能变小了。在这种情况下,文件只能变得更大,所以file.truncate()是不相关的

相关问题