You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中write()后调用readline()为何写入至文件末尾而非读取位置?

Python r+模式下读写交替导致写入位置异常的原因

现象说明

仅写入的正常情况

用r+模式打开文件后直接执行写入,会覆盖文件开头的字符,这符合r+模式的预期行为:

with open("testfile", "r+") as my_file:
    my_file.write("========")

测试文件原内容:

first line
second line
third line
fourth line

执行后文件开头的first li会被========覆盖,结果为:

========ne
second line
third line
fourth line

读写交替的异常情况

但如果在write()之后调用readline()(或其他读取方法),会发现写入的内容并没有覆盖开头,而是被追加到了文件末尾:

with open("testfile", "r+") as my_file:
    my_file.write("========")
    print(my_file.readline())

原因解析

这种差异源于文件读写切换时的指针规则和缓冲区机制:

  • 仅执行写入操作时,文件指针初始在开头,写入操作直接从该位置开始覆盖内容,写入完成后指针停在写入内容的末尾。此时没有后续操作,缓冲区会在文件关闭时自动刷新到磁盘,修改自然作用在开头。
  • 当写入后立即执行读取时,Python会先强制刷新输出缓冲区(把内存里待写入的内容同步到磁盘)。而根据底层操作系统的文件规范(比如POSIX标准),在r+这种读写混合模式下,从写操作切换到读操作时,如果没有先通过seek()显式指定指针位置,系统会自动把文件指针移动到文件末尾。这就导致原本应该写入开头的内容,最终被写到了文件末尾。

本质上是读写交替时未显式定位指针,触发了系统的指针自动同步规则,改变了写入的实际位置。


内容的提问来源于stack exchange,提问作者Code.Kraft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:37:58