Python 在findall之后获取特定值

Python 在findall之后获取特定值,python,Python,我有下面的代码,它收集连接到计算机的设备列表,它返回UDID:然后是序列号,因此正确的返回如下所示 [UDID:340ad1234dfawd123,UDID:123ads345ads45112] 我目前的代码返回这些正确,但我需要它给我只是序列号,这样我可以循环从一个序列号到下一个,这样他们可以被测试一个接一个 我当前的代码如下所示: def list_devices(): out = subprocess.getoutput([GBTest, '--list-devices'])

我有下面的代码,它收集连接到计算机的设备列表,它返回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
我怎样才能添加一条线,使其只显示序列号,以便从一个序列号运行到下一个序列号

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

下面是out的示例值

名称:SM-900 | UDID:1234ADAWD1231244ADAW


姓名:phone | UDID:7891263AJD092173

好的,这里有两种方法:

首先,这是我的测试输入

下面是一个使用该输入列表的方法

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))
它为我输出:

['1234ADAWD1231244ADAW','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'])

可以肯定的是,您能否为out提供一个示例值。此外,序列号是第二个UDID值?请在OP中输入样本值并进行编辑,而不是作为注释。谢谢。添加了shawn提到的out示例。请提供out的示例值和正确的代码`这将帮助我们了解问题clearlyok,thx@user1304228。所以你给了我们两个有效的输入值。现在,请指出每一个的正确输出=+1表示TDD:返回值in out的类型是什么?是str吗?如果有多个条目,例如,SM-900和电话在一个返回中,它们之间的区别是什么?谢谢你,先生,把其中的零碎部分拿出来,得到了我想要的东西。请记住,1标准字符串方法非常强大,在使用re之前,您应该先使用它们-您得到了正确的拆分,但是您将列表放入另一个列表中,这导致2考虑代码中每个点的对象类型。我怀疑你得到的是一个列表,所以你不需要[out],这是一个列表的列表。祝你好运
better_new_list_devices(subprocess.getoutput([GBTest, '--list-devices'])