python 为什么这个文件.writelines(str)会出错

rbl8hiat  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(90)

当我创建todo-item时,我想将输入内容添加到我的文件中,为什么我在file.whileline()中添加字符串时不能达到预期的效果?
我想使用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)
p3rjfoxz

p3rjfoxz1#

writelines接受一个列表,而不是一个字符串。对于你正在尝试做的事情,我推荐write,它确实需要一个字符串。如果这样做,还需要以追加模式打开文件,这意味着传递"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)
8cdiaqws

8cdiaqws2#

**问题:**您在'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)

相关问题