嵌套列表,来自bash输出的Python

时间:2018-07-23 05:37:06

标签: python regex list

如何通过删除终端输出来创建嵌套列表?

例如:我正在查询终端以获取一些输出(在这种情况下,它与纱线有关)

import subprocess    
outputstring=subprocess.check_output("yarn application -list | grep " + user, shell=True)    
mylist = (re.split("[\t\n]+",outputstring))=

这将在Yarn上运行的每个Job的每一行上产生一个输出。     例如:

line1 = a,b,c,d,e
line2 = f,g,h,i,j
line3 = k,l,m,m,o

我可以根据此输出创建一个列表,但可以将所有单词作为逗号分隔的值(如

)作为一个列表
mylist = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o] using the regex above.

但需要创建如下列表:

mylist = [[a,b,c,d,e], [f,g,h,i,j], [k,l,m,n,o]] 

即:

mylist = [[line1],[line2],[line3]]

任何人都可以建议如何实现此目标吗?

我当前使用的正则表达式是:

mylist = (re.split("[\t\n]+",outputstring))

3 个答案:

答案 0 :(得分:2)

尝试此列表理解:

a="""a,b,c,d,e
f,g,h,i,j
k,l,m,m,o"""
mylist=[e.split(",") for e in a.split("\n")]

答案 1 :(得分:2)

非常抱歉,但是如果不是必须使用正则表达式,那么您可以不这样做吗?

my_list = [line1.split(','), line2.split(','), line3.split(',')]

或这个

initial_list = []

initial_list.append(line1)
initial_list.append(line2)
initial_list.append(line3)

final_list = [x.split(',') for x in initial_list]

我知道您肯定不仅有3行,而且如果您可以对输出执行[“ a,b,c,d,e,f,g,h,j,k,l”],也许您可​​以也这样做。

答案 2 :(得分:1)

您还可以使用map函数:

output = """a,b,c,d,e
f,g,h,i,j
k,l,m,m,o"""

output = list(map(lambda i: i.split(','), output.split('\n')))
print(output)

输出:

[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h', 'i', 'j'], ['k', 'l', 'm', 'm', 'o']]