Python3中已读至末尾的文件写入新内容后如何重新读取?
Python读取文件后,更新内容无法获取新数据的解决方法
问题原因
第一次执行f.read()时,文件指针会移动到文件末尾。即便外部编辑器修改并保存了文件内容,Python的文件对象不会自动感知这种变化,再次调用read()只会从当前指针位置(末尾)开始读取,因此无法获取新增内容。
解决方案
方案1:记录初始文件大小,读取新增内容
通过os.stat获取文件初始大小,待文件更新后,将指针移至初始大小的位置,读取新增部分:
import os with open("text.txt", "r") as f: content = f.read() print(content) initial_size = os.stat("text.txt").st_size if input() == "q": current_size = os.stat("text.txt").st_size if current_size > initial_size: f.seek(initial_size) print(f.read())
方案2:关闭后重新打开文件读取
如果允许重复读取全部内容,可关闭原文件后重新打开读取:
with open("text.txt", "r") as f: print(f.read()) if input() == "q": with open("text.txt", "r") as f: print(f.read())
注:此方案会再次打印原有内容+新增内容,若仅需新增部分,优先选方案1。
方案3:用seek和tell记录指针位置
通过文件对象的tell()记录初始指针位置,更新后刷新文件状态并读取新增内容:
import os with open("text.txt", "r") as f: print(f.read()) pos = f.tell() if input() == "q": f.seek(0, os.SEEK_END) new_pos = f.tell() if new_pos > pos: f.seek(pos) print(f.read())
内容的提问来源于stack exchange,提问作者EyeDm
相关产品推荐
相关产品推荐

