Python寻求阅读不断增长的文件

时间:2014-12-24 04:39:23

标签: python

我编写了一个python脚本,使用Task Scheduler每5分钟运行一次,读取不断增长的日志文件(文本文件)并将数据插入数据库。每天生成新的日志文件。

我需要修改它并将指针放在最后一行的末尾,所以当调度程序再次运行时,它会在最后一行插入之后启动。一旦新的一天开始,指针将返回到新文件的第一行。寻求功能会做到这一点,但无法弄清楚如何。这是我的尝试:

import time, os
day=time.strftime("%Y%m%d")
month=time.strftime("%m")
filename=time.strftime("%Y%m%d")

# Check for a new day
currTime = datetime.datetime.now()
lastDay = 0


#Open file in a relative location
logs_dir = os.path.dirname(r'C:\Python27\Logs\\') 
rel_path = os.path.join('\\', month, filename + '.log')
abs_file_path = os.path.join(logs_dir, month, filename) + '.log'
file = open(abs_file_path, 'r')


if currTime.day != lastDay:
  lastDay = currTime.day
  file.seek(first_byte_to_read) #<<-- to reset the pointer ??
else:
  file.seek(last_read_byte) 

1 个答案:

答案 0 :(得分:2)

您可以只运行一次程序并让它监视文件中的新内容,而不是重复运行程序并记住您中断的位置。有两种主要方法可以做到这一点:

  1. 轮询。读取直到文件结束,然后等待几秒钟再试一次。简单,可靠,但在功率受限的设备上并不是一个好主意。
  2. 异步。在Linux上,当文件中有新内容时,您可以使用PyInotify唤醒。看起来好像你在Windows上,为此,请看这里:How do I watch a file for changes?有点复杂,但通常是更好的解决方案。