【问题标题】:Directory-tree listing limiter Python目录树列表限制器 Python
【发布时间】:2020-03-22 07:26:23
【问题描述】:

正如标题所解释的,我已经尝试了该网站上已发布问题的几个答案。问题是,我试图能够选择我挖掘的文件夹的级别。例如,如果我只想选择直接子目录,它看起来像这样:

Subfolder #1
Subfolder #2
Subfolder #3
Subfolder #4

但是,如果我想要相同但同时显示已经提到的子目录的直接子目录,它看起来像这样:

Subfolder #1
  Subfolder #1 of the subfolder #1
  Subfolder #2 of the subfolder #1
Subfolder #2
  Subfolder #1 of the subfolder #2
Subfolder #3
Subfolder #4
  Subfolder #1 of the subfolder #4
  Subfolder #2 of the subfolder #4
  Subfolder #3 of the subfolder #4

PD:我对 Python 还很陌生,所以我可能遗漏了很明显的东西。

编辑:我重新提出了这个问题,所以我可以更好地解释我的问题,因为它显然令人困惑,并且按照我说的方式没有任何意义。

【问题讨论】:

  • 你的意思是像os.listdir()? tutorialspoint.com/python/os_listdir.htm。我想您的问题令人困惑,因为如果您想要一棵树,那么您为什么只对直接子目录感兴趣。一棵树意味着您正在经历多个层次结构......
  • 我不明白你的问题。 “没有格式化的版本”是什么意思?对我来说,您链接的问题似乎已经回答了您的问题。您想要“直接子目录”,但os.walk 正是如此。在每次迭代中,它都会产生“当前目录”文件和子目录的列表。如果您想要“直接子目录”,您只需在第一次迭代时停止:for _, immediate_subdirectories, _ in os.walk(parent_dir)):breaknext(os.walk(parent_dir))[1]
  • @Spencer 好吧,os.listdir() 的问题在于它不使用目录树样式,因为这是我的问题的重点。
  • @racer21 斯宾塞说你想要的是一个目录列表(字面意思),而不是一棵树。您只是想逐行获取输出吗?如果是这样,您是否尝试过for f in os.listdir(somedir): print(f)?否则你能edit这个问题并澄清一下,并给出一些预期的输出吗?
  • 问题已经完全重新表述,所以我可以更好地解释我的问题。

标签: python directory-tree


【解决方案1】:

如果我正确理解了这个问题,这应该可以满足您的要求。这是一个简单的递归函数,它只记录它进入目录的“深度”程度,并在达到所需的递归次数时完成。如果您需要更多解释,请告诉我。

import os

search_dir = "path/to/dir"
inspection_depth = 1

def walk(path, depth):
    depth += 1
    folders = [f for f in os.listdir(path) if os.path.isdir(os.path.join(path, f))]

    for folder in folders:
        full_path = os.path.join(path, folder)
        print(full_path)

        if depth < inspection_depth:
            walk(full_path, depth)

# Call the recursive function
walk(search_dir, 0)

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 2019-04-23
    • 2021-02-17
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    相关资源
    最近更新 更多