我有一个文件路径列表,如下所示:
paths = [
'A/B/b.py',
'A/B/C/c1.py',
'A/B/C/c2.py',
'M/N/O/o1.py',
'M/N/O/o2.py',
'M/N/P/p1.py',
'M/N/P/p2.py',
'M/N/P/R/r2.py'
]
我想将其转换为如下目录列表:
only_dirs = [
'A',
'A/B',
'A/B/C',
'M',
'M/N',
'M/N/O',
'M/N/P',
'M/N/P/R',
]
磁盘上不存在这些路径,它们只是从DB收集的字符串,我想得到一个目录列表,以便根据路径中的任何目录过滤文件。这样做最干净的方法是什么?
答案 0 :(得分:4)
result = set()
for items in paths:
splitted = items.split("/")[:-1]
for idx in xrange(1, len(splitted) + 1):
result.add("/".join(splitted[:idx]))
only_dirs = sorted(result)
print only_dirs
<强>输出强>
['A', 'A/B', 'A/B/C', 'M', 'M/N', 'M/N/O', 'M/N/P', 'M/N/P/R']
答案 1 :(得分:0)
编辑回答
正如thefourtheye的评论所指出的,我的第一个答案是错误的。
以下是该问题的新解决方案:
only_dirs = []
for path in paths:
current = path[:path.rfind('/')]
while len(current) > 0:
if current not in only_dirs:
only_dirs.append(current)
current = current[:current.rfind('/')]
only_dirs.sort()
print only_dirs