迭代文件夹,然后子文件夹和打印文件名以及文本文件的路径

man*_*449 19 directory python-2.6 subdirectory

我正在尝试使用python来创建批量运行其他软件所需的文件.对于部分内容,我需要生成一个文本文件,将所需的数据文件加载到软件中.我的问题是我需要输入到这个文本文件的文件存储在一组结构化文件夹中.

我需要遍历一组文件夹(最多20个),每个文件夹最多可包含3个包含我需要的文件的文件夹.文件夹的底层包含每次运行软件所需的一组文件.文本文件应该具有逐行打印的这些文件的路径+名称,添加指令行,然后从文件夹中移动到下一组文件,依此类推,直到检查完所有子级文件夹.

小智 46

查尔斯的答案很好,但可以改进,以提高速度和效率.os.walk()生成的每个项目都是三个项目的元组.这些项目是:

  1. 工作目录
  2. 命名工作目录中存在的任何子目录的字符串列表
  3. 工作目录中存在的文件列表

知道了这一点,查尔斯的大部分代码都可以通过修改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
Run Code Online (Sandbox Code Playgroud)

  • 只需使用列表推导式:`return [os.path.join(r, n) for r, _, f in os.walk(dir) for n in f]`。 (2认同)

Cha*_*ian 18

使用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(subdir + "/" + file)                                                                         
    return r                                                                                                          
Run Code Online (Sandbox Code Playgroud)