带子字符串的Python排序字符串数组
我有一个数组,其中包含“ps aux”命令的输出。我的目标是使用命令名列对数组进行排序,但我不知道如何进行排序,也无法找到答案 这是到目前为止我的代码带子字符串的Python排序字符串数组,python,arrays,sorting,Python,Arrays,Sorting,我有一个数组,其中包含“ps aux”命令的输出。我的目标是使用命令名列对数组进行排序,但我不知道如何进行排序,也无法找到答案 这是到目前为止我的代码 #!/usr/bin/python import subprocess ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0] processes = ps.split('\n') nfields = len(processes[0].spli
#!/usr/bin/python
import subprocess
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = ps.split('\n')
nfields = len(processes[0].split()) - 1
for row in processes[1:]:
# print row.split(None, nfields) //This is used to split all the value in the string
print row
此代码snipet的输出类似于
...
root 11 0.0 0.0 0 0 ? S< 2012 0:00 [kworker/1:0H]
root 12 0.0 0.0 0 0 ? S 2012 0:00 [ksoftirqd/1]
root 13 0.0 0.0 0 0 ? S 2012 0:00 [migration/2]
...
。。。
根11 0.0 0.0?S<2012 0:00[kworker/1:0H]
根120.0 0.0?S 2012 0:00[ksoftirqd/1]
根13 0.0 0.0?S 2012 0:00[迁移/2]
...
因此,我的目标将有一个类似的输出,但在最后一列排序,所以最后看起来是这样的
...
root 13 0.0 0.0 0 0 ? S 2012 0:00 [migration/2]
root 12 0.0 0.0 0 0 ? S 2012 0:00 [ksoftirqd/1]
root 11 0.0 0.0 0 0 ? S< 2012 0:00 [kworker/1:0H]
...
。。。
根13 0.0 0.0?S 2012 0:00[迁移/2]
根120.0 0.0?S 2012 0:00[ksoftirqd/1]
根11 0.0 0.0?S<2012 0:00[kworker/1:0H]
...
你们中有人知道怎么做吗?类似这样的事情:
sorted(..., key=lambda x: x.split()[10])
#!/usr/bin/env python
import subprocess
from operator import itemgetter
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = [p for p in ps.split('\n') if p]
split_processes = [p.split() for p in processes]
for row in sorted(split_processes[1:], key=itemgetter(10)):
print " ".join(row)
然后像这样打印出结果:
#!/usr/bin/env python
import subprocess
from operator import itemgetter
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = [p for p in ps.split('\n') if p]
split_processes = [p.split() for p in processes]
for row in sorted(split_processes[1:], key=itemgetter(10)):
print " ".join(row)
或者类似这样(如果您只需要进程名称和参数):
大概是这样的:
#!/usr/bin/env python
import subprocess
from operator import itemgetter
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = [p for p in ps.split('\n') if p]
split_processes = [p.split() for p in processes]
for row in sorted(split_processes[1:], key=itemgetter(10)):
print " ".join(row)
然后像这样打印出结果:
#!/usr/bin/env python
import subprocess
from operator import itemgetter
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = [p for p in ps.split('\n') if p]
split_processes = [p.split() for p in processes]
for row in sorted(split_processes[1:], key=itemgetter(10)):
print " ".join(row)
或者类似这样(如果您只需要进程名称和参数):
您也可以利用shell中的sort命令,而不是用python来实现这一点:
ps aux | sort--key=10
。当然,这不会去掉第一行。为此,您需要类似于awk:ps aux | awk'NR!=1{print;}'| sort--key=10
您还可以利用shell中的sort命令:ps aux | sort--key=10
。当然,这不会去掉第一行。为此,您需要类似于awk:ps aux | awk'NR!=1{print;}'| sort--key=10