Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打开要追加的文件_Python - Fatal编程技术网

Python 打开要追加的文件

Python 打开要追加的文件,python,Python,我只是想了一下,想知道还有什么地方比这里更好。出于好奇,是否有人知道是否打开一个文件进行追加,如下所示: 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 我只是想知道,打开一个文件

我只是想了一下,想知道还有什么地方比这里更好。出于好奇,是否有人知道是否打开一个文件进行追加,如下所示:

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

我只是想知道,打开一个文件进行追加是否实际上是在幕后执行第二个块,即打开进行写入,然后搜索文件的结尾。

不太可能。使用append强制所有写入操作转到文件的末尾,在那里您可以通过写入操作查找到另一个位置。

这取决于您所使用的系统;使用append标志打开文件通常意味着您将在文件末尾写入,而不管写入指针的位置如何。换句话说,这可能意味着您的操作系统必须在每次写入之前执行查找到文件结尾的操作,或者在打开文件之后只查找指向文件结尾的指针。您可以很容易地检查它在您的环境下是如何工作的,但唯一可以保证的行为是在打开后寻找到底


编辑:正如其他人指出的,
w
标志有效地截断了文件。如果你想在不删除当前内容的情况下打开它进行更新,你必须使用
r+
标志(但是,如果
a
,则允许读取)。在我的终端上播放一段时间后,我可以说在使用python 2.7.1的ubuntu linux 11.04上有什么区别

用“w”打开文件会在文件打开后立即截断(即删除其内容)。换句话说,只要用
open('file.txt','w')
打开文件并退出,就会留下一个空文件

使用“a”打开时,文件内容保持不变。因此,用
open('file.txt','a')
打开并退出会使文件保持不变

这也适用于open的更新选项。命令
open('file.txt','w+')
将保留一个空文件,而命令
open('file.txt','r+')
open('file.txt','a+')
将保留未更改的文件

选项“r+”和“a+”之间的区别在于其他人所建议的行为。选项“r+”允许您在文件中的任意位置写入,而“a+”强制所有写入操作都在文件末尾,而不管您将文件的当前位置设置在何处


如果您想进一步了解它,根据函数open接受类似于C的stdio的模式。

“W”将删除内容数据,然后搜索到最终位置。因此,您将以一个指针指向BOF而不是EOF的空文件结束。使用“A”来保存旧数据。

你怎么可能分辨出差异?使用单个
w
很好;如果我们想打开文件进行更新而不截断它,它应该是
r+
。@tomasz不知道你在说什么。顺便说一句,python没有“rw”选项用于open。除非你提到的更新选项(“r+”、“w+”等)与上面给出的具有相同的效果。karategeek6:你说得对,我刚刚离开后就用
r+/code>编辑了我的评论!对对!我一定是忽略了这样一个事实,即为写作而打开会抹掉一个文件的内容。谢谢