在python3中,readline()方法似乎有一个bug。
我有一个文件 txt.txt,其中包含两行:
1234567890
abcdefghij
然后运行以下代码:
g = open("txt.txt","r+")
g.write("xxx")
g.flush()
g.close()
它按预期修改文件:
xxx4567890
abcdefghij
然后运行以下代码:
g = open("txt.txt","r+")
g.readline()
Out[99]: 'xxx4567890\n'
g.tell()
Out[100] 12
g.write("XXX")
g.flush()
g.close()
我得到以下信息:
xxx4567890
abcdefghij
XXX
为什么“XXX”被写入文件末尾而不是第一行之后?
如果我运行以下命令:
g = open("txt.txt","r+")
g.readline()
Out[99]: 'xxx4567890\n'
g.tell()
Out[100] 12
g.seek(12)
g.tell()
g.write("XXX")
g.flush()
g.close()
我得到:
xxx4567890
XXXdefghij
XXX
这似乎是 readline() 中的一个错误 - 它说光标位于 12,但在 EOF 处写入
该说法正确。默认情况下写到最后将是
'a+'
(打开以供阅读和追加),但如果您在其他地方 .seek()
,它仍然可能依赖于操作系统。请参阅 open() 文档::
... 'a' 用于追加(在 some Unix 系统上,意味着所有写入都追加到文件末尾,无论当前的查找位置如何)。
在我的 Windows 系统上进行的实验证实,
'r+'
和 'w+'
从文件开头开始,而 'a+'
从文件末尾开始。使用 'a+'
,所有写入都会在写入之前先查找末尾,因此任何后续读取都需要查找文件中的前一点,否则将一无所获。