自上次读取以来从文件中提取新数据的Python脚本

时间:2011-07-13 00:04:01

标签: python parsing extraction

我正在使用python脚本执行以下操作: -

我想每隔十分钟读取一个日志文件,每次读取时,我想将上次读取的任何添加数据提取到文件中(最好不必每次都读取整个日志文件)。例如: -

在09:00我读了日志文件,内容是: -

1. 2011-07-04 11:15:04,507 Processing request 17897931 from status 7 to 13
2. 2011-07-04 11:15:04,508 Processing request 17897931 from status 13 to 17
3. 2011-07-04 11:15:04,508 Processing request d0fcb681 from status 7 to 13
4. 2011-07-04 11:15:04,509 Processing request d0fcb681 from status 13 to 17
5. 2011-07-04 11:15:04,509 Processing request 178819a1 from status 7 to 13

在09:10我再次阅读了日志文件,现在的内容是: -

1. 2011-07-04 11:15:04,507 Processing request 17897931 from status 7 to 13
2. 2011-07-04 11:15:04,508 Processing request 17897931 from status 13 to 17
3. 2011-07-04 11:15:04,508 Processing request d0fcb681 from status 7 to 13
4. 2011-07-04 11:15:04,509 Processing request d0fcb681 from status 13 to 17
5. 2011-07-04 11:15:04,509 Processing request 178819a1 from status 7 to 13
6. 2011-07-04 11:15:04,510 Processing request 178819a1 from status 13 to 17
7. 2011-07-04 11:15:04,510 Processing request 17161df1 from status 7 to 13
8. 2011-07-04 11:15:04,511 Processing request 17161df1 from status 13 to 17
9. 2011-07-04 11:15:04,511 Processing request 182013e1 from status 7 to 9

我的脚本如何提取新行(第6行到第9行)?

我有一个shell脚本,它已经通过使用文件的inode来完成此任务。我正在寻找基于python的解决方案。

我的计划是通过crontab执行脚本。

你们有什么想法我能做到这一点吗?

1 个答案:

答案 0 :(得分:2)

  1. 检查文件大小
  2. 等到尺寸改变
  3. 打开文件,寻找以前的尺寸
  4. 示例:

    import os, time
    size = os.stat(file).st_size
    time.sleep(600)
    fh = open(file)
    fh.seek(size)
    newData = fh.read()
    

    如果另一个进程同时写入日志,此示例将不时读取部分行。我会把这个解决方案留作练习:)