【问题标题】:Get a list of directories which complies with a condition获取符合条件的目录列表
【发布时间】:2020-09-29 08:31:24
【问题描述】:

我正在编写一个列出目录中的目录的 Python 脚本。任务看起来很简单。

但是,就我而言,我想做一些更复杂的事情。假设我有以下结构

----folder1----conditionfolder----conditionfile
  |
  |---folder2----conditionfolder
  |
  |---folder3 

到目前为止,脚本只列出了目录:

  • 文件夹 1
  • 文件夹2
  • 文件夹 3

但是我希望脚本只列出 符合条件的目录

例如,如果我想列出具有名为“conditionfolder”的子目录的目录,我会得到

  • 文件夹 1
  • 文件夹2

另一方面,如果我想列出具有名为“conditionfolder”的子目录的目录,并且在其中有一个名为“conditionfile”的文件,我将拥有

  • 文件夹 1

如何在 python 中做到这一点?

编辑:

按照@Susmit Agrawal 的回答,我这样做了:

thelist=list(glob.glob('./*/conditionfolder/conditionfile'))
print(thelist)

所以现在我有一个表格列表:

['.\\folder1\\conditionfolder\\conditionfile']

这很棒。但理想情况下,我想拥有这个

['folder1']

仅表示文件夹列表。 我猜我可以对原始列表进行操作以通过拆分生成另一个列表

【问题讨论】:

    标签: python python-3.x subdirectory directory-structure


    【解决方案1】:

    如果可以在命令行上将条件描述为正则表达式,最简单的方法是使用glob

    import glob
    
    for path in glob.glob('./*/conditionfolder'):
        # extract required directory name from *path*
    

    './*/conditionfolder' 可以替换为命令行上可用的任何正则表达式。

    【讨论】:

    • 不应将全局模式描述为正则表达式。
    • @alani 想详细说明一下吗?
    • @KansaiRobot,您可以在此处阅读有关 glob 的信息:docs.python.org/2/library/glob.html
    【解决方案2】:

    您可以利用 os.walk 遍历目录结构并根据条件打印。

    import os
    
    path_to_consider = r'c:\dev\testFolder'
    for root,directory,file in os.walk(path_to_consider,topdown=True):
        for d in directory:
               if d == 'conditionfolder':
                   print(f"The folder containing conditionFolder is {root}")
        for f in file:
             if f == 'conditionfile.txt':
                 print(f"The folder containing conditionFile is {root}")
    

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多