Directory 遍历文件夹,然后遍历子文件夹,并打印带有文本文件路径的文件名

Directory 遍历文件夹,然后遍历子文件夹,并打印带有文本文件路径的文件名,directory,python-2.6,subdirectory,Directory,Python 2.6,Subdirectory,我正在尝试使用python创建批处理运行其他软件所需的文件。 为此,我需要生成一个文本文件,将所需的数据文件加载到软件中。 我的问题是,我需要输入此文本文件的文件存储在一组结构化文件夹中 我需要循环一组文件夹(最多20个),每个文件夹最多可以包含3个以上的文件夹,其中包含我需要的文件。文件夹的底层包含软件每次运行所需的一组文件。文本文件应逐行打印这些文件的路径+名称,添加一条指令行,然后从文件夹移动到下一组文件,依此类推,直到选中所有子级文件夹。使用os.walk()。下面将输出“dir”子目录

我正在尝试使用python创建批处理运行其他软件所需的文件。 为此,我需要生成一个文本文件,将所需的数据文件加载到软件中。 我的问题是,我需要输入此文本文件的文件存储在一组结构化文件夹中

我需要循环一组文件夹(最多20个),每个文件夹最多可以包含3个以上的文件夹,其中包含我需要的文件。文件夹的底层包含软件每次运行所需的一组文件。文本文件应逐行打印这些文件的路径+名称,添加一条指令行,然后从文件夹移动到下一组文件,依此类推,直到选中所有子级文件夹。

使用os.walk()。下面将输出“dir”子目录中所有文件的列表。可以根据您的需要对结果进行操作:

import os                                                                                                             
                                                                                                                      
def list_files(dir):                                                                                                  
    r = []                                                                                                            
    subdirs = [x[0] for x in os.walk(dir)]                                                                            
    for subdir in subdirs:                                                                                            
        files = os.walk(subdir).next()[2]                                                                             
        if (len(files) > 0):                                                                                          
            for file in files:                                                                                        
                r.append(os.path.join(subdir, file))                                                                         
    return r                                                                                                          

对于Python3,将
next()
更改为
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。由os.walk()生成的每个项(请参见)都是由三个项组成的元组。这些项目是:

  • 工作目录
  • 命名工作目录中存在的任何子目录的字符串列表
  • 工作目录中存在的文件列表
  • 知道了这一点,Charles的大部分代码都可以通过修改forloop进行压缩:

    import os
    
    def list_files(dir):
        r = []
        for root, dirs, files in os.walk(dir):
            for name in files:
                r.append(os.path.join(root, name))
        return r
    

    这将有助于列出特定的文件扩展名。在我的子文件夹中,我有许多文件,但我只对拼花地板文件感兴趣

    import os
    dir = r'/home/output/'
    def list_files(dir):
    r = []
    for root, dirs, files in os.walk(dir):
        for name in files:
            filepath = root + os.sep + name
            if filepath.endswith(".snappy.parquet"):
                r.append(os.path.join(root, name))
    return r
    

    那么,根和目录的差异是什么?我应该为dir写什么?我要浏览的所有子文件夹的父文件夹,对吗?此代码不适用于我:(返回空数组…@alwaysaskingquestions
    root
    是由
    os生成的元组的第一项。walk()
    dir
    是您要迭代的文件的目录。在我的答案代码中,子文件夹(由元组项
    dirs
    指示)忽略。仅使用文件及其根目录。只需使用列表理解:
    返回[os.path.join(r,n)表示r,\uf表示os中的f。walk(dir)表示f中的n]