打开文件以进行追加
我刚刚有个想法,觉得在这里问问最合适不过了。出于好奇,有没有人知道打开一个文件进行追加,比如这样:
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 个回答
"W"会删除文件中的内容,然后把指针移动到文件的最后面。所以,最终你会得到一个空文件,指针在文件的开始位置(BOF),而不是结束位置(EOF)。如果想保留旧的数据,可以使用"A"。
其实不是这样的。使用追加(append)这个方式会强制所有的写入操作都发生在文件的末尾。如果你想在文件的其他位置写入内容,是可以通过定位(seek)到那个地方来实现的。
在我的终端上玩了一会儿之后,我可以说在使用 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 函数 类似。