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

Python写入二进制数据后调用file.flush()不生效问题问询

问题根因

这个问题和flush()方法是否生效没有关系,核心出错点是文件指针位置偏移:

  • 执行dump(l, f)写入列表数据的过程中,文件指针会同步向后移动,写入完成后指针刚好停在所有写入内容的末尾
  • 此时直接调用load(f),会从指针当前所在的末尾位置开始读取数据,自然读不到任何内容
  • flush()的作用仅为将内存缓冲区中未写入的内容同步到磁盘,不会修改文件指针的当前位置,它本身是正常执行完成的

修复方法

在读取数据之前调用f.seek(0),将文件指针手动移动到文件起始位置即可正常读取,修改后的参考代码如下:

from pickle import *

l = [1, 2, 3, 4]
f = open('file.txt', 'r+b')

dump(l, f)
f.flush()

f.seek(0) # 将文件指针移动到文件开头
print(load(f)) # 正常输出 [1, 2, 3, 4]

补充说明

  • 同一文件对象交替执行写、读操作时,切换操作前必须手动将文件指针调整到目标读取位置,否则会出现读空或者读错数据的问题
  • 如果不需要继续操作文件,调用close()关闭文件时也会自动触发缓冲区刷入磁盘的操作,和flush()的核心作用一致

内容的提问来源于stack exchange,提问作者Oleksandr Novik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:06:08