在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 中启动之前我会删除所有变量
您正在“文本模式”下使用该文件(
b
参数中没有mode
)。 文档说明
f.tell() 返回一个整数,给出文件对象在文件中的当前位置,在二进制模式下表示为从文件开头开始的字节数,在文本模式下则返回一个不透明的数字。
这是一个预期错误,
f.tell()
返回
12
意味着实际文件光标当前位于字节位置12
。