lin*_*sek 0 python string parsing eeprom
我遇到的情况是我必须使用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????
Run Code Online (Sandbox Code Playgroud)
我对Python很新.有没有办法在读入后自动切断字符串中的数据?
你的意思是:
>>> 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'
Run Code Online (Sandbox Code Playgroud)
在python3上,你需要到join字符串:
''.join(filter(lambda x: ord(x)<128,s)
Run Code Online (Sandbox Code Playgroud)
适用于python2和python3的版本是:
''.join(x for x in s if ord(x) < 128)
Run Code Online (Sandbox Code Playgroud)
最后,可以想象多余的垃圾可能包含打印字符.在这种情况下,你可能只想读取一个非打印字符,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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2401 次 |
| 最近记录: |