我遇到的情况是我必须使用Python来读取和写入嵌入式设备上的EEPROM。第一页(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的新手。有没有办法在读入后自动切断字符串中的数据?
答案 0 :(得分:5)
你的意思是:
>>> 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'
在python3上,你需要join
字符串:
''.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))