蟒蛇新手。
我正在尝试解析一个奇怪的 fifo 的输出并且无法弄清楚它。基本上我有:
fifoopen = open("./foo/fifoA")
while True:
line = fifoopen.readline()
print line
它工作正常并打印fifo的输出,因为它由另一端的应用程序输入。但是,该应用程序会随机向 fifo 发送重复或三次行。因此,我正在寻找有关如何解析 fifo 的输出以仅打印新的唯一行的建议。
感谢您提供的任何帮助,
-大学教师
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
您是否只对消除连续重复感兴趣?还是有重复的?如果有任何重复,我建议保留一组以前见过的行;否则,保留看到的最后一行的副本就足够了。在任何一种情况下,如果 (new line) == (old line(s)),请跳过它。