-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

連続した重複を排除することにのみ関心がありますか?または重複はありますか?重複している場合は、以前に見た行のセットを保持することをお勧めします。それ以外の場合は、最後に表示された行のコピーを保持するだけで十分です。いずれの場合も、(改行)==(古い行)の場合はスキップしてください。

于 2012-06-07T03:33:40.253 に答える