【问题标题】:Why is the Python .readlines() method seemingly erasing a file?为什么 Python .readlines() 方法似乎在擦除文件?
【发布时间】:2019-07-20 00:41:53
【问题描述】:

我正在尝试创建一个待办事项列表应用程序,为了存储用户任务,我将它们逐行写入纯文本文件。在多个点我通过调用foo.readlines()“同步”它,但即使我将测试数据手动写入文件,列表返回空并且纯文本文件的内容被删除。

我尝试手动打开文件并写入并保存它,但运行脚本后,它再次为空,列表返回为空。

import numpy as np

file = open('./data.txt', 'w+')
tasks = file.readlines()

print(tasks)

#writes list to a file
def writeFile(tasks):
    with open('data.txt', 'w') as filehandle:
        for listitem in tasks:
            filehandle.write('%s\n' % listitem)

【问题讨论】:

    标签: python file save


    【解决方案1】:

    您正在write 模式下打开文件,并在第 3 行使用“w+”。这会删除文件的内容。

    您可能打算在

    中使用“r”而不是“w”
    with open('data.txt', 'w') as filehandle:
    

    【讨论】:

    • 嗨,我不知道以写入方式打开会删除内容!谢谢!
    • fopen 手册页 (man7.org/linux/man-pages/man3/fopen.3.html) 说:w+ 为读写而打开。如果文件不存在,则创建该文件,否则将其截断。流位于文件的开头。
    • 但是python open 文档没有提到+ 模式,所以它有点不足。
    • 这部分正确。用“w+”打开不应该删除文件内容。但我相信以这种方式打开文件会将光标置于文件末尾,因此尝试读取行不会产生任何结果。因此,任务是空的。然后稍后以“w”模式打开文件会删除其内容。此外,在打印任务之前,您应该使用 file.close() 关闭文件
    • 正如我上面提到的,linux 手册页说“w+”会截断文件(如果存在)。您可能正在考虑“a”(附加)模式。
    【解决方案2】:

    如果没有指定,'Read'模式是默认模式

    file = open('data.txt')
    

    以“读取”模式打开文件

    file = open('data.txt', 'r')
    

    以“写入”模式打开文件(如果存在,将覆盖文件内容)

    file = open('data.txt', 'w')
    

    以“追加”模式打开文件(将追加到现有文件而不覆盖)

    file = open('data.txt', 'a')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-25
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多