为啥 Python .readlines() 方法似乎在擦除文件?

Posted

技术标签:

【中文标题】为啥 Python .readlines() 方法似乎在擦除文件?【英文标题】: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)

【问题讨论】:

【参考方案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')

【讨论】:

以上是关于为啥 Python .readlines() 方法似乎在擦除文件?的主要内容,如果未能解决你的问题,请参考以下文章

python文件读取 readlines()方法之坑

python中read()readline()readlines()函数

python read() readline() readlines() write() writelines()方法总结与区别

python中read()readline()readlines()区别

Python - 文件读取read()readline()readlines()区别

python读文件的三个方法read()readline()readlines()详解