打开文件以进行追加

8 投票
4 回答
20384 浏览
提问于 2025-04-16 22:32

我刚刚有个想法,觉得在这里问问最合适不过了。出于好奇,有没有人知道打开一个文件进行追加,比如这样:

file_name = "abc"
file_handle = open(file_name,"a")

这和打开一个文件进行写入然后移动到文件末尾,是不是基本上是一样的:

file_name = "abc"
file_handle = open(file_name,"w")
file_handle.seek(0,2) # 0 for offset, 2 for end-of-file

我只是想知道,打开一个文件进行追加,实际上是不是在后台做了第二个代码块的操作,也就是先打开文件进行写入,然后再移动到文件的末尾。

4 个回答

2

"W"会删除文件中的内容,然后把指针移动到文件的最后面。所以,最终你会得到一个空文件,指针在文件的开始位置(BOF),而不是结束位置(EOF)。如果想保留旧的数据,可以使用"A"。

2

其实不是这样的。使用追加(append)这个方式会强制所有的写入操作都发生在文件的末尾。如果你想在文件的其他位置写入内容,是可以通过定位(seek)到那个地方来实现的。

20

在我的终端上玩了一会儿之后,我可以说在使用 Python 2.7.1 的 Ubuntu Linux 11.04 上,不同打开文件的方式有什么区别。

用 'w' 打开文件会立刻清空文件的内容。换句话说,光是用 open('file.txt', 'w') 打开文件,然后退出,就会留下一个空文件。

而用 'a' 打开文件则会保留文件的内容。所以用 open('file.txt', 'a') 打开文件,然后退出,文件的内容不会改变。

这个规则同样适用于其他打开文件的选项。比如,命令 open('file.txt', 'w+') 也会留下一个空文件,而 open('file.txt', 'r+')open('file.txt', 'a+') 则会保持文件内容不变。

至于 'r+' 和 'a+' 这两个选项的区别,正如其他人提到的那样,'r+' 允许你在文件的任何位置写入,而 'a+' 则强制所有写入都发生在文件的末尾,不管你把文件的当前指针放在哪里。

如果你想更深入了解,可以参考 Python 文档,里面提到的 open 函数的模式和 C 语言的 stdio 中的 fopen 函数 类似。

撰写回答