我使用的是Python v2.x Windows 64位。问题是,我想从列表中提取一个数字(102),但我只能得到if的一部分。
下面是一个列表:
data = ['getmotors \r', 'Parameter,Value\r', 'Brush_RPM,0\r', 'Brush_mA,0\r', 'Vacuum_RPM,0\r', 'Vacuum_mA,0\r', 'LeftWheel_RPM,1800\r', 'LeftWheel_Load%,42\r', 'LeftWheel_PositionInMM,10452\r', 'LeftWheel_Speed,102\r', 'RightWheel_RPM,1800\r', 'RightWheel_Load%,42\r', 'RightWheel_PositionInMM,9650\r', 'RightWheel_Speed,102\r', 'ROTATION_SPEED,0.00\r', 'SideBrush_mA,0\r', '\x1a']如何提取LeftWheel_Speed (102)的速度?我试过data[9][-2],但得到的是‘2’而不是‘102’。
发布于 2016-02-12 03:18:51
使用re.search和正则表达式模式,可以从字符串中提取整数值。
>>> import re
>>>
>>> re.search(r'\d+', data[9])
<_sre.SRE_Match object; span=(16, 19), match='102'>
>>> re.search(r'\d+', data[9]).group(0)
'102'
>>> speed = int(re.search(r'\d+', data[9]).group(0))
>>> speed
102在这里,如果data9包含任何十进制字符,则re.search(r'\d+', data[9])将返回匹配。然后使用.group(0)检索该十进制字符,最后使用int()内置方法将它们转换为整数
发布于 2016-02-12 03:21:03
>>> int(data[9][-4:-1])+1
103使用iterable[start:end]获取它们的子集。
你可以做的另一件事是,如果你想从一个字符串中获得一个整数,可以使用类似于(python2.x)的代码:
s = "test123\n"
x = int(filter(lambda x: x.isdigit(), s))在Python3中,filter返回一个可迭代的filter object。您可以将其转换为列表,并将它们连接起来,以获得相同的函数结果。
s = "test123\n"
x = int(''.join(list(filter(lambda x: x.isdigit(), s))))请注意,这不考虑分隔的数字。例如,s = "123test456"将返回123456。如果你想把它们分开,你需要使用一些更聪明的方法。
>>> s = "\n123test456\n"
>>> nums = map(int, ''.join([x if x.isdigit() else ' ' for x in s]).split())
>>> print(nums)
[123, 456]同样,在python3中,map返回一个map object,因此您只需将其转换为列表。
>>> s = "\n123test456\n"
>>> nums = list(map(int, ''.join([x if x.isdigit() else ' ' for x in s]).split()))
>>> print(nums)
[123, 456]发布于 2016-02-12 03:24:34
如果列表中包含单个,的所有项都可以被视为键值对,则可以将数据转换为字典。这使得访问您感兴趣的值变得很容易。
datadict = {}
for item in data:
key_value = item.strip().split(',')
if len(key_value) == 2:
key, value = key_value
datadict[key] = value
print(datadict['RightWheel_Speed']) # 102https://stackoverflow.com/questions/35347974
复制相似问题