仅解析唯一行的fifo输出

时间:2012-06-07 03:18:31

标签: python fifo

python的新手。

我正在尝试解析一个奇怪的fifo的输出并且无法搞清楚它。基本上我有:

fifoopen = open("./foo/fifoA")
while True:
    line = fifoopen.readline()
print line

工作正常并打印fifo的输出,因为它是由另一端的应用程序输入的。但是,该应用程序随机地向fifo发送重复或重复的行。因此,我正在寻找有关如何解析fifo输出以仅打印新的唯一行的建议。

我感谢您提供的任何帮助,

-Don

2 个答案:

答案 0 :(得分:1)

您是否只对消除连续重复项感兴趣?或任何重复?如果有任何重复,我建议保留一组先前看到的线;否则,保留最后一行的副本就足够了。在任何一种情况下,if(new line)==(old line(s)),跳过它。

答案 1 :(得分:1)

itertools documentation有一个恰当的配方:

def unique_justseen(iterable, key=None):
    "List unique elements, preserving order. Remember only the element just seen."
    # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
    # unique_justseen('ABBCcAD', str.lower) --> A B C A D
    return imap(next, imap(itemgetter(1), groupby(iterable, key)))

虽然作为生成器表达式可能更具可读性:

def unique_justseen(iterable, key=None):
    return (next(i[0]) for i in groupby(iterable, key))

您可以这样使用:

for line in unique_justseen(fifoopen):
   print line