0

私は自分のプログラムを使用して書いていますpeekが、これは私が持っているものです:

with open('temp.txt', 'r') as inpf2:
    while True:
            c = [inpf2.read(1)]
            if not c:
                break
            k = c.peek(2)
            for d in k:
                if(d == ""):
                    break
                else:
                    c = c.append(d)
            print c  

このプログラムでは、peek次のようなテキストを含むテキスト ファイルで 2 文字を先読みするために使用し、、、、、、、、、、、、、、、のようなabcdefg3 文字の文字列を出力しようとしています。 abcbcdcdedefefg

しかし、このプログラムを実行すると、エラーが発生します。

k = c.peek(2)  
AttributeError: 'list' object has no attribute 'peek'.  

私はどこで間違いを犯していますか?

4

4 に答える 4

2

メソッドを持つPythonオブジェクトを認識していませんpeek( を除いてio.BufferedStream、ドキュメントの検索から返される唯一のメソッドです)。

peek自分で関数を定義する必要があると思います。あなたが始めることができるレシピをオンラインで見つけることができます.

特定の問題については、おそらく使用を検討できますcollections.deque

于 2012-09-29T16:10:22.830 に答える
1

先を覗くのではなく、すでに見たキャラクターを覚えておいてください。つまり、現在の文字と次の2文字を印刷せずに、現在の文字と最後の2文字を印刷します。

from collections import deque

with open('temp.txt') as infile:
    window = deque(infile.read(2), maxlen=3)
    nextchar = infile.read(1)
    while nextchar:
        window.append(nextchar)
        print "".join(window)
        nextchar = infile.read(1)
于 2012-09-29T17:07:14.793 に答える
0

cはリストなので、リストにしようとしpeekています。少なくとも、peekリストの最初の要素を呼び出す必要があるため、次のようなものですc[0].peek()

しかし、その場合でも、ファイルにデータを入力しているので、次のように、返されたデータの代わりにファイル オブジェクトcを呼び出す必要があります。peekk = inpf2.peek(2)

于 2012-09-29T15:51:47.187 に答える