在findall之后获得特定值

时间:2017-05-17 17:53:31

标签: python

我有以下代码收集连接到计算机的设备列表,它返回一个UDID:然后是序列号,所以正确的返回看起来像这样

[UDID:340ad1234dfawd123,UDID:123ads345ads45112]

我当前的代码正确地返回这些代码然而我需要它只给我序列号,这样我就可以从一个序列号循环到下一个序列号,这样就可以逐个测试它们。

我目前的代码如下:

def list_devices():
    out = subprocess.getoutput([GBTest, '--list-devices'])
    DEVICES = [out]
    UDID = out.split(' : ')[-1]
    #return UDID
    items=re.findall("UDID: *.*",UDID,re.MULTILINE)
    return items

我如何添加一条只能作为序列号的行,以便我可以从一个运行到下一个?

非常感谢您对新用户的帮助!

以下是

的示例值

名称:SM-900 | UDID:1234adawdawd1231244adaw

姓名:电话| UDID:7891263ajbd092173

1 个答案:

答案 0 :(得分:1)

好的,这里有几种方法:

首先,这是我的测试输入

input = ['Name: SM-900 | UDID: 1234adawdawd1231244adaw',
         'Name: phone | UDID: 7891263ajbd092173']

这是一个使用该输入列表的方法。

def new_list_devices(devices):
    serial_numbers = [] # init an empty list to store results
    for entry in devices: # create a loop for each device listed
        serial_numbers.append(entry.split(': ')[-1]) # append the split value
    return serial_numbers # return it

您可以使用

进行测试
print(new_list_devices(input))

它输出给我:

  

['1234adawdawd1231244adaw','7891263ajbd092173']

现在改进:

def better_new_list_devices(devices):
    return [entry.split(': ')[-1] for entry in devices]


print(better_new_list_devices(input))

产生相同的输出。

更好的方法是使用列表理解来构建列表并直接返回。

您需要适应的唯一事情是确定如何获取方法的输入。你可以

def better_new_list_devices():
    return [entry.split(': ')[-1] for entry in subprocess.getoutput([GBTest, '--list-devices']]

或者如果那太多分手了

def better_new_list_devices():
    devices = subprocess.getoutput([GBTest, '--list-devices']
    return [entry.split(': ')[-1] for entry in devices]

或者您甚至可以将输入列表作为参数传递,所以

def better_new_list_devices(devices):
    return [entry.split(': ')[-1] for entry in devices]

调用
better_new_list_devices(subprocess.getoutput([GBTest, '--list-devices'])