4

PySerial と Python (3.3) に問題があります: 実行しているコード (今のところ、これは単純なテスト ケースです) は次のとおりです。

ser = serial.Serial('/dev/ttyACM0', 115200)
result = ser.readline()
parsed = result.split(",")

次のエラーが発生します。

TypeError: type str doesn't support the buffer API

私の愚かな間違いは何ですか?これは、PySerial の readline がバイナリ文字列を返している (python 3 の新機能?) という事実と、バイナリ文字列に対して実行すると文字列操作の「分割」が失敗するという事実にたどり着いたと思います-これを実行すると正常に動作します:

'1234, asdf, 456, jkl'.split(",")

これにより、次のことが期待されます。

['1234', 'asdf', '456', jkl']

しかし、実行中:

b'1234, asdf, 456, jkl'.split(",")

上記のエラーが発生します。使用する別の readline メソッドはありますか? read を使用して独自のコードを作成する必要がありますか (/r/n が表示されるまで読み取ります)、または str.isalnum() を満たす文字列に簡単に変換できますか? ありがとう!

4

1 に答える 1

3

最も簡単な解決策は、バイナリ文字列を ascii 文字列に変換するための関数を選択できる binascii という python モジュールを使用することです: http://docs.python.org/2/library/binascii.html

編集: b は、それがバイト配列であり、リテラル文字列ではないことを意味します。バイト配列をリテラル文字列に変換する正しい方法は、str() 関数を使用することです。

str(b'1234, asdf, 456, jkl', 'ascii').split(",")

これにより、必要な出力が得られます: ['1234', 'asdf', '456', jkl']

それが役立つことを願っています!

于 2012-11-14T14:48:00.847 に答える