-2

蟒蛇新手。

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

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

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

感谢您提供的任何帮助,

-大学教师

4

2 回答 2

1

itertools 文档为此提供了一个秘诀:

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
于 2012-06-07T03:39:37.027 回答
1

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

于 2012-06-07T03:33:40.253 回答