首页 > 解决方案 > 将子进程的输出拆分为列表或元组

问题描述

我有一个格式为的文件列表

[
    '1582120598 672 /Users/user/Desktop/',
    '1581847900 64 /Users/user/Desktop//untitled folder',
    '1581842714 352 /Users/user/Desktop//RECEIPTS',
    '1581686620 433097 /Users/user/Desktop//RECEIPTS/cameringo_20200214_132341.jpg'
]

我想将每个条目分成list(或元组,如果这样会更好)。我目前正在使用这个:

new_list = list(map(lambda x: re.findall('(\d+)\s(\d+)\s(.*)',str(x)), copy_list))

但是输出作为一个tuple包装在一个listie中返回。第一个条目是失败的,[('1582120598, 672, /Users/user/Desktop/')]new_list[0][0]我希望它返回1582120598

谢谢你的帮助

标签: pythonpython-3.x

解决方案


你需要其他组吗?对于您的特定用例,您可以通过在空格上拆分字符串而不是使用正则表达式来大大简化您的 lambda:

>>> new_list = [
...     '1582120598 672 /Users/user/Desktop/',
...     '1581847900 64 /Users/user/Desktop//untitled folder',
...     '1581842714 352 /Users/user/Desktop//RECEIPTS',
...     '1581686620 433097 /Users/user/Desktop//RECEIPTS/cameringo_20200214_132341.jpg'
... ]
>>> first_fields = [y.split()[0] for y in new_list]
['1582120598', '1581847900', '1581842714', '1581686620']
>>> first_fields[0]
'1582120598'

否则,如果您也需要其他组:

>>> new_list = list(map(lambda x: re.findall('(\d+)\s(\d+)\s(.*)',str(x)), copy_list))
>>> first_fields = [x[0][0] for x in new_list]
['1582120598', '1581847900', '1581842714', '1581686620']
>>> first_fields[0]
'1582120598'

旁白

您可以使用列表推导式简化您的new_list创建,如下所示:

new_list = [re.findall('(\d+)\s(\d+)\s(.*)',str(x)) for x in copy_list]

推荐阅读