python - 将子进程的输出拆分为列表或元组
问题描述
我有一个格式为的文件列表
[
'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
包装在一个list
ie中返回。第一个条目是失败的,[('1582120598, 672, /Users/user/Desktop/')]
而new_list[0][0]
我希望它返回1582120598
谢谢你的帮助
解决方案
你需要其他组吗?对于您的特定用例,您可以通过在空格上拆分字符串而不是使用正则表达式来大大简化您的 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]
推荐阅读
- javascript - 解析标记的字符串并将其转换为反应组件
- javascript - sql查询节点js中的循环
- php - 创建 PDF 文件时,行之间的表格对齐在 TCPDF 中不起作用
- python - 为什么总项功能不打印报表
- python - Raspberry Pi:GPIO-pin 通过 GPIO.setup() 变高
- react-native - 什么是致命异常:com.facebook.react.bridge.NoSuchKeyException:价值问题?
- c# - 如何让我的 2D 角色“看起来”或朝他移动的方向翻转?
- angular - 是否可以在嵌套的惰性模块中使用 HTTP_INTERCEPTORS?
- python - 如何在 django 中按日期、时间和秒进行过滤?
- regex - Notepad++ 正则表达式从这个列表中提取用户名