如何读取以“a +”模式打开的文件?

时间:2013-02-01 04:51:27

标签: python windows io

根据定义," a +" mode打开文件以进行追加和读取。附加作品,但阅读方法是什么?我做了一些搜索,但无法在任何地方找到它。

f=open("myfile.txt","a+")
print (f.read())

试过这个,它打印为空白。

4 个答案:

答案 0 :(得分:12)

使用f.seek()将文件偏移量设置为文件的开头。

注意:在Python 2.7之前,有一个错误会导致某些操作系统没有始终指向文件末尾的文件位置。这可能会导致某些用户使用您的原始代码。例如,在CentOS 6上,您的代码可以按照您的意愿工作,但不应该如此。

f = open("myfile.txt","a+")
f.seek(0)
print f.read()

答案 1 :(得分:2)

使用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将在写入之前将指针移动到最后一行。

答案 2 :(得分:0)

模式 r +读取和写入从文件开头开始 r只读从文件开头开始 a +阅读/追加。通过写入文件末尾来保留文件内容

祝你好运! 伊莎贝尔鲁伊斯

答案 3 :(得分:0)

新版本的Python依赖于操作系统仍有一些怪癖,它们是由于stdio中fopen()函数的实现不同造成的。

Linux的man fopen

  

a + - 打开阅读和追加(在文件末尾写)。如果文件不存在,则创建该文件。读取的初始文件位置位于文件的开头,但输出始终附加到文件的末尾。

OS X:

  

``a +'' - 开放阅读和写作。如果文件不存在,则创建该文件。流位于文件的末尾。对文件的后续写入将始终以当前文件末尾结束,无论是否有任何介入的fseek(3)或类似内容。

MSDN并没有真正说明指针最初设置的位置,只是它在写入时移动到结尾。

  

使用“a”或“a +”访问类型打开文件时,所有写入操作都发生在文件末尾。可以使用fseek或rewind重新定位文件指针,但在执行任何写入操作之前,始终将其移回文件末尾。因此,现有数据不能被覆盖。

使用{@ 1}} .open

复制Python 2.7.x和3k在各种系统上的差异非常简单

通过操作系统处理任何事情时,采取明确的.tell等预防措施会更安全。