【问题标题】:How to list all files in a given directory and subdirectories?如何列出给定目录和子目录中的所有文件?
【发布时间】:2020-03-29 11:37:23
【问题描述】:

我想从用户那里获取一个路径,并且我想列出该路径中所有目录和子目录的文件名。到目前为止,我只能获取目录而不是子目录的文件名: 我不允许使用 os.walk()

import sys, os.path

l = []
def fnames(path):
    global l
    l = os.listdir(path)
    print(l)


path = '/Users/sohamphadke/Desktop'

for i in l:
    if os.path.isdir(l) == True:
        fnames(l)
    elif os.path.isdir(l) == False:
        break

【问题讨论】:

    标签: python python-3.8


    【解决方案1】:

    您可以查看os.walk() 方法,它会根据您的要求获取您的树。

    【讨论】:

      【解决方案2】:

      您可以使用os.walk 穿过路径。参考docs

      import os
      for root, dirs, files in os.walk(path):
          print("root: {}\ndirs: {}\nfiles: {}".format(root, dirs, files))
      

      【讨论】:

        【解决方案3】:

        glob 模块是你的答案!

        您可以访问文档here,即:

        如果递归为真,模式“**”将匹配任何文件和零 或更多目录、子目录和目录的符号链接。 如果模式后跟 os.sep 或 os.altsep 则文件将 不匹配

        所以你可以这样做:

        import os
        import glob
        paths_list = glob.glob('/Users/sohamphadke/Desktop/**/*', recursive=True)
        
        # Separate between files and directories
        dirs_list = [path for path in paths_list if os.path.isdir(path)]
        files_list = [path for path in paths_list if os.path.isfile(path)]
        

        希望这会有所帮助!

        【讨论】:

        • @Soham Phadke 这能回答你的问题吗?
        【解决方案4】:

        如果你被允许使用pathlib...

        path = '/Users/sohamphadke/Desktop'
        
        paths = Path(path).glob("**/*")
        file_list = [p for p in paths if p.is_file()]
        dir_list = [p for p in paths if p.is_dir()]
        

        注意paths 是一个生成器,因此您可以遍历每个路径并一次检查它是文件还是目录。

        【讨论】:

          猜你喜欢
          • 2012-11-14
          • 2012-09-02
          • 2016-01-16
          • 2010-12-15
          • 2014-10-16
          • 2020-08-19
          • 2011-03-01
          相关资源
          最近更新 更多