如何通过删除终端输出来创建嵌套列表?
例如:我正在查询终端以获取一些输出(在这种情况下,它与纱线有关)
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))
答案 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']]