如何在python中从上到下遍历每个路径?

2024-09-23 06:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

给我一串这个

s='MayaWindow|toolBar2|MainShelfLayout|formLayout14|ShelfLayout|Custom'

在Python2.7中获得这样的列表最简单的方法是什么?在

^{pr2}$

例如:

import re
for t in s.split('|'):
    print re.search(r'.*%s'%t,s).group()

但如果路径中的某些文件夹名称不唯一,则会中断,例如

s='MayaWindow|toolBar2|MainShelfLayout|formLayout14|formLayout14|Custom'

import re
for t in s.split('|'):
    print re.search(r'.*%s'%t,s).group()

MayaWindow
MayaWindow|toolBar2
MayaWindow|toolBar2|MainShelfLayout
MayaWindow|toolBar2|MainShelfLayout|formLayout14|formLayout14
MayaWindow|toolBar2|MainShelfLayout|formLayout14|formLayout14
MayaWindow|toolBar2|MainShelfLayout|formLayout14|formLayout14|Custom

Tags: inimportre列表forsearchcustomgroup
3条回答

在python3.2中,itertools.accumulate允许我们避免使用索引

from itertools import accumulate
s = 'MayaWindow|toolBar2|MainShelfLayout|formLayout14|ShelfLayout|Custom'

new_list = list(accumulate(s.split('|'), lambda x,y: '|'.join((x,y))))

print(new_list)

生产

^{pr2}$

另一方面,在python2中,您可以沿着这条线做一些事情

^{3}$

一句话:

>>> [s.rsplit("|", i)[0] for i in range(s.count("|"), -1, -1)]
['MayaWindow',
 'MayaWindow|toolBar2',
 'MayaWindow|toolBar2|MainShelfLayout',
 'MayaWindow|toolBar2|MainShelfLayout|formLayout14',
 'MayaWindow|toolBar2|MainShelfLayout|formLayout14|ShelfLayout',
 'MayaWindow|toolBar2|MainShelfLayout|formLayout14|ShelfLayout|Custom']

在感兴趣的分隔符上拆分它,然后在每个切片大小之间循环:

s = 'MayaWindow|toolBar2|MainShelfLayout|formLayout14|ShelfLayout|Custom'
l = s.split('|')
new_list = [l[:idx] for idx in range(1, len(l)+1)]

结果:

^{pr2}$

或者,如果您想要字符串而不是lists,join()它们回到分隔符上:

^{3}$

结果:

>>> for item in new_list:
...     print(item)
...
MayaWindow
MayaWindow|toolBar2
MayaWindow|toolBar2|MainShelfLayout
MayaWindow|toolBar2|MainShelfLayout|formLayout14
MayaWindow|toolBar2|MainShelfLayout|formLayout14|ShelfLayout
MayaWindow|toolBar2|MainShelfLayout|formLayout14|ShelfLayout|Custom

相关问题 更多 >