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

Python 递归列出目录,但不包括具有特定字符的任何文件夹,python,recursion,directory-structure,Python,Recursion,Directory Structure,我有两个任务: 我用杜威十进制分类法建立了我的数字图书馆,所以我有一个3层的10+100+1000文件夹的层次结构,目录有时会更深一些。这个库结构包含我希望在目录中列出的“书籍”(可能是可搜索的文本文档)。如果我能在每本“书”旁边的单独一列中查看父目录名,那就更好了,尽管这不是绝对必要的 问题是我的图书馆中的一些“书”是单独作为项目的文件夹。当我设计这个系统并制作它时,我提前做了计划,这样我的库中的每个项都会在[]s中包含一个标记,例如,该标记将包含作者姓名,所以我的想法是,我会尝试执行所有这些

我有两个任务:

  • 我用杜威十进制分类法建立了我的数字图书馆,所以我有一个3层的10+100+1000文件夹的层次结构,目录有时会更深一些。这个库结构包含我希望在目录中列出的“书籍”(可能是可搜索的文本文档)。如果我能在每本“书”旁边的单独一列中查看父目录名,那就更好了,尽管这不是绝对必要的

  • 问题是我的图书馆中的一些“书”是单独作为项目的文件夹。当我设计这个系统并制作它时,我提前做了计划,这样我的库中的每个项都会在
    []
    s中包含一个标记,例如,该标记将包含作者姓名,所以我的想法是,我会尝试执行所有这些的递归列表,但当遇到
    [
    在名称、目录或文件中

  • 我应该怎么做呢?我知道一点Python(这是我最初用来创建库结构的东西),因为它是在外部硬盘上,所以我可以在Windows或Linux中执行。我的大致想法是执行某种递归列表,检查每个目录或文件的名称是否有
    [
    ,如果有,请停止并将其(连同父目录的名称)添加到列表中。我不知道从何处开始。

    答案基于何处

    • dirName:它找到的下一个目录
    • 子目录列表:当前目录中的子目录列表
    • 文件列表:当前目录中的文件列表
    删除不能由完成,因为我们必须这样做。相反,我们在列表的深层副本上使用
    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]
    

    Google搜索“python中的遍历目录树”立即生成了此链接和其他一些好链接:。您可以根据需要添加字符串匹配。构建一个类!
    类库
    可以有一个
    更新
    方法,它可以执行所有这些遍历操作,并且您可以在执行时添加搜索等功能!
    类书
    可以包含每个类的杜威十进制分类书,所以你可以做一些类似于
    [book(file)for root,dir,file in os.walk(rootDir)]
    的事情。做一些很酷的事情!!也就是说,我真的不明白你的图书馆是如何用你的“目录书”布局的问题。您能详细说明一下吗?您的上一个循环无法正确删除多个项目,因为原始
    子列表
    中后续项目的索引将在您删除早期项目时发生更改。您需要向后迭代(从末尾到开头),或者使用不同的方法就地修改列表(例如片分配:
    子列表[:]=[elem表示子列表中的元素,如果“[”不在元素中]
    ).说得好。但我们不能使用列表理解,因为它不在适当的位置。我正在编辑它。它现在固定为向后枚举。经过一点修补,到目前为止,这似乎像预期的那样工作,如果不完美的话。我编辑了此答案以反映我的修改。这显示目录为“books”或项目,就像其他文件一样。谢谢您的帮助!