2017-06-23 19 views
2

私はPythonで個々の文字のストリームを持っていて、文字列バッファを4文字長くしたいのですが、どのようにして最新の文字がバッファの最後に移動するのですか?他の文字はすべて1つ下にシフトします。Pythonの文字列がシフトして文字を挿入する

シリアルポートから入力された文字列が、decodedという変数にデコードされ、ループが1つ実行されるたびにser.read()から1文字だけ読み込まれます。特定の文字列が受信されたときにループを終了したい。これを行うには、文字をバッファに入れて確認できるようにしたい。

など。

デコードループの各実行は、バッファと呼ばれる変数に入る

H 

e 

l 

l 

o 

ser = serial.Serial(port='COM1') 

PBIT = True 
while PBIT 
    read = ser.read() 
    decoded = read.decode('utf-8') 

あろう。

" " 

" H" 

" He" 

" Hel" 

"Hell" 

"ello" 
+1

はどのように追加のシリアル部分は、あなたの質問は、どの明確にするのでしょうか? –

+0

私はそれがないと思います。デコードが一度に1文字しか得られないことをより明白にしようとしていました。ごめんなさい。デキュールを試してみましょう。 – Rob

+0

私は参照してください。いいえ、申し訳ありません。ちょうど確かにしなければならなかった。 * for *ループは一度に1文字も与えます。 –

答えて

8

あなたは、固定長のcollections.deque(両端キュー)を使用してバッファを作成することができます。両端キューが一杯になると、アイテムが新しいエントリに対応するために、反対側の端から廃棄さ

from collections import deque 

size = 4 
decode = "Hello" 
buffer = deque(' '*size, maxlen=size) 

for x in decode: # simulates characters coming from a stream 
    buffer.append(x) 
    print(''.join(buffer)) 

を。


H 
    He 
Hel 
Hell 
ello 
関連する問題