我正在编写一个脚本来验证deb软件包正在安装到特定文件夹。我很绿,是python的新手。我有一个与python-apt模块一起使用的脚本,它返回了一个包含包中所有文件的文件路径的列表。由于一些依赖性问题,我不能再使用python-apt模块,所以我试图调用dpkg
来收集信息并将其解析为文件路径列表。以下是我用来获取dpkg
命令返回的项目列表的内容。我需要解析除了最后一个空间的权利之外的一切。什么是最有效的解析方法?
self.lists = commands.getoutput("dpkg -c "+deb).split('\n')
这个结果就是这个清单:
list: ['drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:24 ./', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:14 ./opt/', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:14 ./opt/usr/', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:15 ./opt/usr/apps/', '-r--r--r-- ejohnson/ejohnson 179491 2012-03-06 15:15 ./opt/usr/apps/xbean-spring-2.8.jar', '-rw-r--r-- ejohnson/ejohnson 518 2012-03-06 15:15 ./opt/usr/apps/Hello.class', '-r--r--r-- ejohnson/ejohnson 1901653 2012-03-06 15:15 ./opt/usr/apps/spring-1.2.6.jar']
我想重新格式化列表,以便列表中的每个项目都是最后一个空格之后的项目,例如['./','./opt/','./opt/usr/','./opt/usr/apps/'...]
感谢您寻找
答案 0 :(得分:6)
很简单,只需将您的列表放在l
变量中,此代码就适合您。
[el.split()[-1] for el in l]
答案 1 :(得分:2)
使用split
将每个字符串转换为列表。使用相对列表索引获取每个列表的最后一个元素。
如需额外学分,请在一行列表中理解。
答案 2 :(得分:2)
str.rpartition
可能比str.split
[x.rpartition(" ")[2] for x in your_list]
对于此处的示例,它的速度是其快两倍
$ python -m timeit -s "L=['drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:24 ./', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:14 ./opt/', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:14 ./opt/usr/', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:15 ./opt/usr/apps/', '-r--r--r-- ejohnson/ejohnson 179491 2012-03-06 15:15 ./opt/usr/apps/xbean-spring-2.8.jar', '-rw-r--r-- ejohnson/ejohnson 518 2012-03-06 15:15 ./opt/usr/apps/Hello.class', '-r--r--r-- ejohnson/ejohnson 1901653 2012-03-06 15:15 ./opt/usr/apps/spring-1.2.6.jar']" \
> "[x.split()[-1] for x in L]"
100000 loops, best of 3: 5.2 usec per loop
$ python -m timeit -s "L=['drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:24 ./', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:14 ./opt/', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:14 ./opt/usr/', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:15 ./opt/usr/apps/', '-r--r--r-- ejohnson/ejohnson 179491 2012-03-06 15:15 ./opt/usr/apps/xbean-spring-2.8.jar', '-rw-r--r-- ejohnson/ejohnson 518 2012-03-06 15:15 ./opt/usr/apps/Hello.class', '-r--r--r-- ejohnson/ejohnson 1901653 2012-03-06 15:15 ./opt/usr/apps/spring-1.2.6.jar']" \
> "[x.rpartition(' ')[2] for x in L]"
100000 loops, best of 3: 2.55 usec per loop
$ python -m timeit -s "L=['drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:24 ./', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:14 ./opt/', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:14 ./opt/usr/', 'drwxr-xr-x ejohnson/ejohnson 0 2012-03-06 15:15 ./opt/usr/apps/', '-r--r--r-- ejohnson/ejohnson 179491 2012-03-06 15:15 ./opt/usr/apps/xbean-spring-2.8.jar', '-rw-r--r-- ejohnson/ejohnson 518 2012-03-06 15:15 ./opt/usr/apps/Hello.class', '-r--r--r-- ejohnson/ejohnson 1901653 2012-03-06 15:15 ./opt/usr/apps/spring-1.2.6.jar']" \
> "[x.rsplit(' ',1)[1] for x in L]"
100000 loops, best of 3: 3.5 usec per loop