递归列出目录,但不包括具有特定字符的任何文件夹

时间:2014-02-18 00:16:21

标签: python recursion directory-structure

我有两个任务:

  1. 我以Dewey十进制分类的格式设置了我的数字图书馆,所以我有一个3 +深层次的10 + 100 + 1000个文件夹,目录有时会更深一些。这个库结构包含我想要在目录中列出的“书籍”(可能是一个可搜索的文本文档)。如果我可以在每个“书”旁边的单独列中查看父目录名称,那么最好(尽管不是绝对必要)。

  2. 问题是我图书馆中的一些“图书”是独立作为项目的文件夹。当我设计这个系统时,我提前计划好,以便我的库中的每个项目都包含[]中包含作者姓名的标签,所以我的想法是我会尝试执行所有这些的递归列表,但当它遇到名称,目录或文件中[的任何内容时结束每次递归。

  3. 我怎么能这样做?我知道一点Python(最初我用来创建库结构),因为这是在外部硬盘驱动器上,我可以在Windows或Linux中执行此操作。我的粗略想法是执行某种递归列表,它将检查[的每个目录或文件的名称,如果是,则停止并添加它(以及父目录的名称)到一个列表。我不知道从哪里开始。

1 个答案:

答案 0 :(得分:2)

答案基于this其中

  • dirName:找到的下一个目录。
  • subdirList:当前目录中的子目录列表。
  • fileList:当前目录中的文件列表。

list comprehension无法删除,因为我们必须"modify the subdirList in-place"。相反,我们会在列表的深层副本上使用enumerate进行删除,以便在原始列表修改后删除后不会跳过计数器i

我没有尝试过,所以不要相信这100%。

# Import the os module, for the os.walk function
import os

# Set the directory you want to start from
rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
    print('Found directory: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)

    for i, elem in reversed(list(enumerate(subdirList[:]))):
        if "[" in elem:
            del subdirList[i]