"a+" 模式定义为同时打开文件进行附加和读取操作。附加操作是有效的,但读取操作应该如何执行?我做了一些搜索,但无法在任何地方找到相关解释。
f=open("myfile.txt","a+")
print (f.read())
尝试过这个,但是它打印了空白。
使用f.seek()
将文件偏移量设置为文件开头。
注意:在Python 2.7之前存在一个错误,会导致一些操作系统的文件位置指针不始终指向文件末尾。这可能会导致某些用户无法按您原来的代码工作。例如,在CentOS 6上,您的代码将按您想要的方式工作,但并不是应该的方式。
f = open("myfile.txt","a+")
f.seek(0)
print f.read()
当您使用f=open(myfile.txt,"a+")
打开文件时,该文件可以同时进行读写操作。
默认情况下,文件句柄指向文件的开头,
这可以通过f.tell()
来确定,其将为0L
。
In [76]: f=open("myfile.txt","a+")
In [77]: f.tell()
Out[77]: 0L
In [78]: f.read()
Out[78]: '1,2\n3,4\n'
f.write
会在写入之前移动指针到最后一行。新版本的Python仍然存在与操作系统相关的问题,这是由于stdio中fopen()函数实现的差异导致的。
Linux的man fopen
:
a+ - 以读取和追加模式打开文件(写入到文件末尾)。如果文件不存在,则创建该文件。用于读取的初始文件位置位于文件开头,但输出始终附加到文件末尾。
OS X:
"a+" - 以读取和写入模式打开文件。如果文件不存在,则创建该文件。流定位在文件末尾。随后对文件的写入始终会停留在当前文件末尾,而不管任何介于它们之间的fseek(3)或类似操作。
MSDN并没有明确指出指针最初设置在哪里,只是在写入时将其移动到末尾。
复制Python 2.7.x和3k上各系统的差异非常简单,只需使用当使用“a”或“a+”访问类型打开文件时,所有写操作都发生在文件末尾。可以使用fseek或rewind重新定位文件指针,但在执行任何写操作之前,它总是被移动回文件末尾。因此,无法覆盖现有数据。
.open
.tell
。在处理任何操作系统时,最好采取预防措施,例如使用显式的.seek(0)
。模式 r+ 读写模式,从文件开头开始 r 只读模式,从文件开头开始 a+ 读/追加模式,通过在文件末尾写入来保留文件内容
祝好运! Isabel Ruiz