从路径列表中提取目录

时间:2014-02-10 09:31:52

标签: python string path

我有一个文件路径列表,如下所示:

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收集的字符串,我想得到一个目录列表,以便根据路径中的任何目录过滤文件。这样做最干净的方法是什么?

2 个答案:

答案 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