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
相关产品推荐
相关产品推荐

