在Python中连续解析文件

时间:2012-11-30 03:13:39

标签: python parsing

我正在编写一个脚本,用HTTP流量线解析文件,并取出域,目前只是将它们打印到屏幕上。我正在使用httpry将流量连续写入文件。这是我用来删除域名的脚本

#!/usr/bin/python

import re

input = open("results.txt","r")

for line in input:
    domain = line.split()[6]
    if domain != "-":
        print domain

虽然这个脚本运行良好,但我想要一种连续运行此脚本的方法,以便在将新流量添加到输入文件时,脚本可以将其删除。我不能只在httpry的输出上运行awk,因为我最终会将这些域输入到Mongo数据库中,我也需要脚本来执行此操作。如果有人能给我一些想法如何在输出上不断运行这个python脚本,但不重新打印以前的条目,那将非常感激。感谢。

2 个答案:

答案 0 :(得分:6)

尝试http://code.activestate.com/recipes/157035-tail-f-in-python/

中的tail -f实施
import time

while 1:
    where = file.tell()
    line = file.readline()
    if not line:
        time.sleep(1)
        file.seek(where)
    else:
        print line, # already has newline

答案 1 :(得分:0)

Node.js有一个很好的readline模块,可以很好地处理这个问题:

var readline = require('readline')
  , fs = require('fs')

var input = process.stdin; // or: fs.createReadStream('input.txt');
var output = process.stdout; // or: fs.createWriteStream('output.txt')

var reader = readline.createInterface({
  input: input,
  output: output
});

reader.on('line', function(line) {
  this.write(line.split(/[ ]+/)[6]);
});

将其保存在.js文件中并执行node domains.js或其他任何命名。或cat file | node domains.js

它将来也应该很好地与mongodb整合:)