0

我处于必须使用 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 相当陌生。有没有办法在读入字符串后自动切断字符串中的数据?

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'

在 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))
于 2013-01-18T14:45:37.270 回答