0

組み込みデバイスのEEPROMの読み取りと書き込みにPythonを使用する必要がある状況にあります。最初のページ(256バイト)は、不揮発性データの保存に使用されます。私の問題は、変数の長さが変化する可能性があることであり、固定量を読み取る必要があります。

たとえば、文字列はアドレス30に格納され、長さは6〜10バイトです。どこで終わるかわからないので、可能な限り最大の長さを読み取る必要があります。それは私に文字列に余分なゴミを与えるということです。

data_str = ee_read(bytecount)
dbgmsg("Reading from EEPROM: addr = " + str(addr_low) + " value = " + str(data_str))

> Reading from EEPROM: addr = 30 value = h11c13����

私はPythonにかなり慣れていません。読み込まれた後、文字列内のそのデータを自動的に切り取る方法はありますか?

4

1 に答える 1

6

次のような意味ですか?

>>> s = 'Reading from EEPROM: addr = 30 value = h11c13����'
>>> s
'Reading from EEPROM: addr = 30 value = h11c13\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd'
>>> filter(lambda x: ord(x)<128,s)
'Reading from EEPROM: addr = 30 value = h11c13'

joinpython3では、次の文字列を使用する必要があります。

''.join(filter(lambda x: ord(x)<128,s)

python2およびpython3で機能するバージョンは次のとおりです。

''.join(x for x in s if ord(x) < 128)

最後に、余分なゴミには印刷文字が含まれている可能性があります。その場合、印刷されない文字を読むまで文字だけを取りたいと思うかもしれません、itertools.takewhile役に立つかもしれません...

import string #doesn't exist on python3.x, use the builtin `str` type instead.
from itertools import takewhile

printable = set(string.printable)  
''.join(takewhile(lambda x: x in printable, s))
于 2013-01-18T14:45:37.270 に答える