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

Python中同一文件对象连续调用read()为何跳过已读取数据?

同一文件对象连续调用read()时跳过已读内容的原因

测试场景

你的测试文件 Textfile.txt 内容:

Hello World
Hello World

执行的Python代码:

def read(bytes):
    with open("Textfile.txt", "r") as File1:
        print(File1.read(bytes))
        print(File1.read(bytes))

read(5)

输出结果:

Hello
Worl

原因解析

这是因为文件对象内部维护着一个文件指针(位置指示器),它记录了下一次读写操作的起始位置:

  • 第一次调用read(5)时,指针从文件起始位置(位置0)移动到了位置5,读取了前5个字符Hello。
  • 第二次调用read(5)时,会直接从当前指针位置(位置5)开始读取后续内容:原文件中Hello World的第5位是空格,之后依次是W、o、r、l,刚好凑够5个字符,所以输出Worl。
  • 这种设计是为了高效处理大文件的分段读取,避免每次都从头遍历文件。

重置读取位置的方法

如果需要每次都从文件开头读取,可以在两次read()之间调用seek(0),将文件指针重置到起始位置:

def read(bytes):
    with open("Textfile.txt", "r") as File1:
        print(File1.read(bytes))
        File1.seek(0)  # 重置指针到文件开头
        print(File1.read(bytes))

read(5)

修改后输出会是两次Hello。

内容的提问来源于stack exchange,提问作者Arun Pandian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:20:29