Python readline() 错误,在 eof 处写入

问题描述 投票: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()
I get the following:

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,除非我使用eek()

我在 Windows 11 上运行所有这些,并使用 Spyder 作为 IDE。有人建议停止缓存,但我不知道该怎么做。在 Spyder 中启动之前我会删除所有变量

python-3.x spyder readline
1个回答
0
投票

您正在“文本模式”下使用该文件(

b
参数中没有
mode
)。 文档说明

f.tell() 返回一个整数,给出文件对象在文件中的当前位置,在二进制模式下表示为从文件开头开始的字节数,在文本模式下则返回一个不透明的数字。

这是一个预期错误,
f.tell()

返回

12
意味着实际文件光标当前位于字节位置
12
    

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