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

时间:2013-11-12 14:41:01

标签: directory python-2.6 subdirectory

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

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

3 个答案:

答案 0 :(得分:40)

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

  1. 工作目录
  2. 命名工作目录中存在的任何子目录的字符串列表
  3. 工作目录中的文件列表
  4. 了解这一点,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
    

答案 1 :(得分: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                                                                                                          

答案 2 :(得分:0)

这将有助于列出特定的文件扩展名。在我的子文件夹中,我有很多文件,但我只是感兴趣的镶木地板文件。

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