Jianqing's Blog Archive

Python 字符切割

本身这个脚本没有什么作用,纯粹是觉得好玩。

执行下面这个命令,我想得到最后一列的数据,其实就是ls的结果


gentoo-pjq / # ls -lh /
total 65K
drwxr-xr-x   2 root root 4.0K 2009-11-11 21:56 bin
drwxr-xr-x   4 root root 1.0K 2009-10-31 16:10 boot
drwxr-xr-x  15 root root 3.9K 2009-11-15 10:33 dev
drwxr-xr-x  94 root root 4.0K 2009-11-15 10:33 etc
drwxr-xr-x  10 root root 4.0K 2009-09-24 20:28 home
drwxr-xr-x  11 root root 4.0K 2009-11-15 00:19 lib
drwx------   2 root root  16K 2009-09-24 19:27 lost+found
drwxr-xr-x  14 root root 4.0K 2009-11-15 10:33 media
drwxr-xr-x   4 root root 4.0K 2008-04-24 03:48 mnt
drwxr-xr-x  18 root root 4.0K 2009-11-15 00:18 opt
dr-xr-xr-x 139 root root    0 2009-11-15 18:32 proc
drwx------  44 root root 4.0K 2009-11-15 11:07 root
drwxr-xr-x   2 root root 4.0K 2009-11-15 00:19 sbin
drwxr-xr-x  12 root root    0 2009-11-15 18:32 sys
drwxrwxrwt   9 root root 4.0K 2009-11-15 15:01 tmp
drwxr-xr-x  16 root root 4.0K 2009-09-26 18:49 usr
drwxr-xr-x  15 root root 4.0K 2009-10-17 19:26 var

要达到这个结果用Python要怎么实现呢:


def exec_shell(command):
    """
    Execute the shell command and return the result.
    """
    pipe=os.popen(command)
    text=pipe.read()
    pipe.close()
    return text

li= str(exec_shell('ls / -lh')).split("\n")
print "\n".join(["%s" %(str(a).split()[7]) for a in li if (lambda args:len(str(a).split()))(a)==8])

运行结果: bin boot dev etc home lib lost+found media mnt opt proc root sbin sys tmp usr var

如果改成这样,就可以加上序号了: print “\n”.join([“%s:%s” %(li.index(a),str(a).split()[7]) for a in li if (lambda args:len(str(a).split()))(a)==8]) 1:bin 2:boot 3:dev 4:etc 5:home 6:lib 7:lost+found 8:media 9:mnt 10:opt 11:proc 12:root 13:sbin 14:sys 15:tmp 16:usr 17:var

Tags: