python的新手。
我正在尝试解析一个奇怪的fifo的输出并且无法搞清楚它。基本上我有:
fifoopen = open("./foo/fifoA")
while True:
line = fifoopen.readline()
print line
工作正常并打印fifo的输出,因为它是由另一端的应用程序输入的。但是,该应用程序随机地向fifo发送重复或重复的行。因此,我正在寻找有关如何解析fifo输出以仅打印新的唯一行的建议。
我感谢您提供的任何帮助,
-Don
答案 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