debugging 为什么file.writelines(str)不能在while循环中工作

f3temu5u  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(100)

当我创建todo-item时,我想在我的文件中添加输入内容。为什么我在file.writeline()中添加字符串时不能达到预期的效果?
我想使用file.writeline()将用户输入的内容写入文件。

while True:
   user_action = input('Type add, show, edit, complete or exit: ')
   user_action = user_action.strip()

   match user_action:
       case 'add':
           todo = input("Enter a todo: ") + "\n"
           todos.append((todo))
           file = open("todos.txt", "w")
           file.writelines(todo)
mec1mxoz

mec1mxoz1#

writelines接受一个列表,而不是一个字符串。对于你正在尝试做的事情,我推荐write,它确实接受一个字符串。如果你这样做,你还需要在append模式下打开文件,这意味着你传递"a"而不是"w"。整个代码看起来像这样:

todos = []

while True: 
    user_action = input('Type add, show, edit, complete or exit: ') 
    user_action = user_action.strip()

    match user_action:
        case 'add': 
            todo = input("Enter a todo: ") + "\n" 
            todos.append((todo))
            with open("todos.txt", "a") as file:
                file.write(todo)
olqngx59

olqngx592#

**问题:**您在'w'(write)模式下打开文件,因此,每次尝试写入文件时,以前的内容都会被覆盖。
**解决方案:**使用'a'(append)模式打开文件
**改进:**不要在循环中打开文件(这会导致不必要的处理),最好在收集所有todos后打开它(仅一次)。
**假设:**我希望你在match语句的末尾使用“default case”(例如:case _

下面是最终代码:

todos = []

while True:
    user_action = input('Type add, show, edit, complete or exit: ')
    user_action = user_action.strip()
    match user_action:
        case 'add':
           todo = input("Enter a todo: ") + "\n"
           todos.append((todo))
           
        case _: break

with open("todos.txt", "a") as file:
    file.writelines(todos)

相关问题