Python 将子流程的输出拆分为列表或元组

Python 将子流程的输出拆分为列表或元组,python,python-3.x,Python,Python 3.x,我有一个文件列表格式为 [ “1582120598672/Users/user/Desktop/”, “1581847900 64/Users/user/Desktop//无标题文件夹”, “1581842714352/用户/用户/桌面//收据”, “158166620 433097/Users/user/Desktop//RECEIPTS/cameringo_20200214_132341.jpg” ] 我想把每个条目分成列表(或者元组,如果那样更好的话)。我目前正在使用这个: new_li

我有一个文件列表格式为

[
“1582120598672/Users/user/Desktop/”,
“1581847900 64/Users/user/Desktop//无标题文件夹”,
“1581842714352/用户/用户/桌面//收据”,
“158166620 433097/Users/user/Desktop//RECEIPTS/cameringo_20200214_132341.jpg”
]
我想把每个条目分成
列表
(或者元组,如果那样更好的话)。我目前正在使用这个:

new_list=list(映射(lambda x:re.findall('(\d+)\s(\d+)\s(.*),str(x)),复制_list))
但是输出以
元组
的形式返回,并封装在
列表中
即。第一个条目是
[('1582120598672,/Users/user/Desktop/')]
,因此
新列表[0][0]
失败,而我希望它返回
1582120598


感谢您的帮助

我想您应该这样做:

my_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'
]

my_new_list = [x.split(' ') for x in my_list]
那么这个,

my_new_list[0][0]
返回:

'1582120598'

我想你应该这样做:

my_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'
]

my_new_list = [x.split(' ') for x in my_list]
那么这个,

my_new_list[0][0]
返回:

'1582120598'
  • 将这些元组列表映射到列表
输出:

[['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']]
'1582120598'
  • 将这些元组列表映射到列表
输出:

[['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']]
'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 = [re.findall('(\d+)\s(\d+)\s(.*)',str(x)) for x in copy_list]

你需要其他小组吗?似乎对于您的特定用例,您可以通过在空格上拆分字符串而不是使用正则表达式来大大简化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 = [re.findall('(\d+)\s(\d+)\s(.*)',str(x)) for x in copy_list]

谢谢不过,唯一的问题是,如果路径包含的空白也会被拆分。谢谢。不过,唯一的问题是,如果路径包含也会被拆分的空格,我确实需要其他组,不幸的是,在空格处拆分将不允许在路径中使用空格。不过谢谢你的简化。我不知道你可以这样做。我确实需要其他组,不幸的是,在空格处拆分将不允许在路径中使用空格。不过谢谢你的简化。我不知道你可以这么做。