我编写了一个 python 脚本,使用任务计划程序每 5 分钟运行一次,读取不断增长的日志文件(文本文件)并将数据插入数据库。每天生成新的日志文件。
我需要修改它并在最后一行的末尾放置一个指针,因此当调度程序再次运行时,它会在最后插入的行之后开始。新的一天开始后,指针返回到新文件的第一行。 Seek 函数可以做到这一点,但还不知道如何实现。这是我的尝试:
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)
您无需重复运行该程序并记住上次停止的位置,只需运行该程序一次并让它监视文件中的新内容即可。有两种主要方法可以做到这一点:
- 轮询。读取直到文件结尾,然后等待几秒钟并重试。简单、可靠,但对于功率受限的设备来说不是一个好主意。
- 异步。在 Linux 上你可以使用pyInotify http://pyinotify.sourceforge.net/当文件中有新内容时被唤醒。不过,您似乎使用的是 Windows,请参阅此处:如何查看文件的更改? https://stackoverflow.com/questions/182197/how-do-i-watch-a-file-for-changes-using-python有点复杂,但通常是更好的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)