我正在设计一个守护进程,它将连续从单个文本文件中读取行并处理这些行。如果在守护进程未运行时将行写入文本文件,跟踪最后处理的行(独立于文件名)的通用方法是什么?
每隔一段时间,文件就会被归档并在其位置创建一个新的空白文件。守护程序将停止以进行归档。
我的第一个想法似乎过于复杂,是计算并存储最后成功处理的记录的散列和行号。然后,当守护程序再次启动时,运行到该行号并计算哈希值。如果哈希匹配,则继续处理下一条记录。如果哈希值不匹配,则从文件的开头重新开始,因为这会表明这是一个新文件。
我感觉日志文件分析器或教科书中的某些东西使用了一种很好的通用技术,但我没有接触过。
最佳答案
假设您有权限、足够的磁盘空间并假设您安全地终止了守护进程... 只需将处理的最后一行写入文件(在守护程序关闭时)。
如果需要,您可以将守护进程的每个实例包装在上下文管理器中
从上下文库导入上下文管理器
http://docs.python.org/library/contextlib.html
class a_daemon():
def __init__(self,last_line):
print "initilizing.."
self.last_line=last_line
def run_me(self):
print "running.."
#while true, process lines, set last_line to current line being processesed.
self.last_line='blah'
from contextlib import contextmanager
@contextmanager
def run_new_daemon():
print "getting last line"
last_line=open("last_line.txt").read() #you should get a "file does not exist" error the first time running this unless you created the file already
my_daemon=a_daemon(last_line)
yield my_daemon
print "shutting down, writing last line to file."
with open("last_line.txt",'w') as last_line_file:
last_line_file.write(my_daemon.last_line)
with run_new_daemon() as my_daemon:
my_daemon.run_me()
关于python - 跟踪文本文件中读取的最后一行的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9170364/