13

根据定义,“a+”模式打开文件以进行追加和读取。追加作品,但阅读的方法是什么?我做了一些搜索,但找不到任何地方澄清。

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

试过这个,它打印空白。

4

4 回答 4

19

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

注意:在 Python 2.7 之前,有一个 bug 会导致某些操作系统不让文件位置始终指向文件末尾。这可能会导致某些用户使用您的原始代码。例如,在 CentOS 6 上,您的代码会按照您的意愿运行,但不会按预期运行。

f = open("myfile.txt","a+")
f.seek(0)
print f.read()
于 2013-02-01T04:53:42.637 回答
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在写入之前会注意将指针移动到最后一行。

于 2013-02-01T04:54:10.543 回答
0

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

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

于 2013-02-01T05:13:40.420 回答
0

依赖于操作系统的较新版本的 Python 中仍然存在一些怪癖,这是由于 stdio 中 fopen() 函数的实现存在差异。

Linux的man fopen

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

操作系统:

``a+'' - 可读写。如果文件不存在,则创建该文件。流位于文件的末尾。对文件的后续写入将始终在文件的当前末尾结束,而与任何干预 fseek(3) 或类似内容无关。

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

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

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

通过操作系统处理任何事情时,采取预防措施(例如使用显式.seek(0).

于 2013-02-01T05:33:36.677 回答