【问题标题】:How do i get list of subdirectories contains specific file (ie. '__main__.py) using Python如何使用 Python 获取包含特定文件(即'__main__.py)的子目录列表
【发布时间】:2014-04-05 12:50:05
【问题描述】:

大家好,我正在尝试获取包含 python 中特定文件的子目录列表??

我使用了 subprocess.call() 并通过 find 命令,

subprocess.call(['find','.','-name','__main__.py'])

但它会在终端打印路径(“./directory/file”)...

【问题讨论】:

    标签: python linux command subprocess


    【解决方案1】:

    您不需要外部子进程,您可以使用纯 Python 找到目录:

    import os
    
    dirs = [root for root, _, filenames in os.walk('.')
            for filename in filenames if filename == '__main__.py']
    

    如果您想懒惰地获取目录名称,请将[] 替换为()

    subprocess 还允许即时获取名称:

    import os
    from subprocess import Popen, PIPE
    
    p = Popen(['find', '.', '-name', '__main__.py'], stdout=PIPE, bufsize=-1)
    for path in p.stdout:
        print(os.path.dirname(path)) # do something with the dirpath
    
    p.stdout.close()
    rc = p.wait()
    

    注意:与纯 Python 版本不同,如果有一个到 __main__.py 的路径,其中包含换行符,它会中断。

    【讨论】:

      【解决方案2】:

      使用subprocess.check_output代替subprocess.call,可以得到命令的输出:

      try:
          output = subprocess.check_output(['find','.','-name','__main__.py'])
      except subprocess.CalledProcessError:
          output = '' # fallback output
      

      output 是一个字符串。您可能需要拆分行来处理每个文件。

      filelist = output.splitlines()
      

      要仅获取包含文件的目录的名称,请使用os.path.dirname

      import os
      for filepath in filelist:
          dirpath = os.path.dirname(filepath)
          # Do something with `dirpath`
      

      【讨论】:

      • 好的,谢谢,但它给了我连续的字符串,提取包含'main.py'文件的子目录的名称真的很麻烦
      • @user3321823,我在几分钟前更新了答案。请查看更新的内容。
      • 哦,是的,我刚刚在发表评论后得到了您的更新答案,谢谢它正在工作......
      • @user3321823,欢迎来到 Stack Overflow!如果这对您有帮助,您可以通过accepting the answer 告诉社区。​​span>
      • 哦,我会的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      相关资源
      最近更新 更多