首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出给定级别上的所有子目录

列出给定级别上的所有子目录
EN

Stack Overflow用户
提问于 2013-05-29 09:49:39
回答 3查看 2.1K关注 0票数 2

我有这样的备份目录结构(所有目录都不是空的):

代码语言:javascript
复制
/home/backups/mysql/
    2012/
        12/
           15/
    2013/
        04/
           29/
           30/
        05/
           02/
           03/
           04/
           05/

通过只提供一个根目录路径,我想获得包含备份的所有目录的列表:

代码语言:javascript
复制
get_all_backup_paths('/home/backups/mysql', level=3) 

这应返回:

代码语言:javascript
复制
/home/backups/mysql/2012/12/15
/home/backups/mysql/2013/04/29
/home/backups/mysql/2013/04/30
/home/backups/mysql/2013/05/02
/home/backups/mysql/2013/05/03
/home/backups/mysql/2013/05/04
/home/backups/mysql/2013/05/05

这些不应该出现在结果中:

代码语言:javascript
复制
/home/backups/mysql/2012
/home/backups/mysql/2012/12
/home/backups/mysql/2013
/home/backups/mysql/2013/04
/home/backups/mysql/2013/05

有没有办法降低os.listdir 3级别,不包括所有其他级别?如果是,我会为你效劳。

代码语言:javascript
复制
def get_all_backup_paths(dir, level):
    # ????
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-29 09:55:36

代码语言:javascript
复制
from glob import iglob

level3 = iglob('/home/backups/mysql/*/*/*')

(这将跳过名称以.开头的“隐藏”目录)

如果在第3级可能有非目录,请使用以下方法跳过它们:

代码语言:javascript
复制
from itertools import ifilter
import os.path

l3_dirs = ifilter(os.path.isdir, level3)

在Python3中,使用filter而不是ifilter

票数 10
EN

Stack Overflow用户

发布于 2013-05-29 09:57:23

您可以使用glob搜索目录树,如下所示:

代码语言:javascript
复制
import os, glob
def get_all_backup_paths(dir, level):
   pattern = dir + level * '/*'
   return [d for d in glob.glob(pattern) if os.path.isdir(d)]

我还包括了一个目录检查,以防文件与目录混合。

票数 5
EN

Stack Overflow用户

发布于 2013-05-29 10:15:30

导入函数工具

代码语言:javascript
复制
def deepdirs(directory, depth = 0):
    if depth == 0:
        return list(filter(os.path.isdir, [os.path.join(directory, d) for d in os.listdir(directory)]))
    else:
        return functools.reduce(list.__add__, [deepdirs(d) for d in deepdirs(directory, depth-1)], [])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16810686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档