我正在写一些东西来为我解析日志文件。
当前,我已打开文件并以这种方式连续读取
file = open(r"log.txt", "rt")
file.seek(0, os.SEEK_END)
while True:
new = file.readline()
// do a bunch of stuff with the contents
await asyncio.sleep(1)
file.close()
我这样做是为了模仿Linux的tail -f
。尽管我发现的是,当写入日志的服务器重新启动时,我猜是因为该文件仍被Python打开,所以无法再对其进行写操作了。
一种更好的方法是打开文件,将内容读取到EOF并存储在缓冲区中并关闭文件,然后对缓冲区中的数据进行解析,然后重新打开文件,再读更多内容。数据并重复?
我是否必须以某种方式跟踪文件中的剩余位置,以便在上次离开的位置打开它?
日志文件将增长,直到服务器重置。服务器重置后,它将获取文件的内容,将其写入新文件(存档),然后重新打开被截断(即是最新的)的先前日志文件。
我可以
tell()
保存最后一个位置seek()
和tell()
中的值来读取文件中的任何新数据吗?