Python bug 文件使用 readline() 在 r+ 中输入/输出光标位置

问题描述 投票:0回答:1

在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 处写入

python-3.x file-io
1个回答
0
投票

该说法正确。默认情况下写到最后将是

'a+'
(打开以供阅读和追加),但如果您在其他地方
.seek()
,它仍然可能依赖于操作系统。请参阅 open() 文档::

... 'a' 用于追加(在 some Unix 系统上,意味着所有写入都追加到文件末尾,无论当前的查找位置如何)。

在我的 Windows 系统上进行的实验证实,

'r+'
'w+'
从文件开头开始,而
'a+'
从文件末尾开始。使用
'a+'
,所有写入都会在写入之前先查找末尾,因此任何后续读取都需要查找文件中的前一点,否则将一无所获。

© www.soinside.com 2019 - 2024. All rights reserved.