为啥 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+ 为读写而打开。如果文件不存在,则创建该文件,否则将其截断。流位于文件的开头。 但是pythonopen
文档没有提到+
模式,所以它有点不足。
这部分正确。用“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中read()readline()readlines()函数
python read() readline() readlines() write() writelines()方法总结与区别
python中read()readline()readlines()区别