首页 > 解决方案 > 构建我的目录和文件路径的字典以选择名称包含特定字符串的所有文件

问题描述

我有一个名为“IC”的根目录。“IC”包含一堆子目录,这些子目录包含子目录,子目录包含子子目录等等。有没有一种简单的方法可以将所有子...目录文件移动到它们的父子目录中,然后删除空的子...目录。

到目前为止,我已经制作了这种嵌套循环的怪物来构建文件路径和子目录的字典作为包含文件路径等的字典。然后我将做一些事情来遍历字典并选择所有包含“IC”的文件和子目录它们在。我需要知道哪些目录包含“IC”文件。我还需要将所有包含“IC”的文件移动到顶级子目录(参见代码中的标签)

import os, shutil

rootdir = 'data/ICs'

def dir_tree(rootdir):
    IC_details = {}
# This first loop is what I'm calling the top level subdirectories. They are the three
# subdirectories inside the directory 'data/ICs'
    for i in os.scandir(rootdir):
        if os.path.isdir(i):
            IC_details[i.path] = {}
    for i in IC_details:
        for j in os.scandir(i):
            if os.path.isdir(j.path):
                IC_details[i][j.name] = {}
            elif os.path.isfile(j.path):
                IC_details[i][j.name] = [j.path]
        for j in IC_details[i]:
            if os.path.isdir(os.path.join(i,j)):
                for k in os.scandir(os.path.join(i,j)):
                    if os.path.isdir(k.path):
                        IC_details[i][j][k.name] = {}
                    elif os.path.isfile(k.path):
                        IC_details[i][j][k.name] = [k.path]
                for k in IC_details[i][j]:
                    if os.path.isdir(os.path.join(i,j,k)):
                        for l in os.scandir(os.path.join(i,j,k)):
                            if os.path.isdir(l.path):
                                IC_details[i][j][k][l.name] = {}
                            elif os.path.isfile(l.path):
                                IC_details[i][j][k][l.name] = [l.path]
                        for l in IC_details[i][j][k]:
                            if os.path.isdir(os.path.join(i,j,k,l)):
                                for m in os.scandir(os.path.join(i,j,k,l)):
                                    if os.path.isfile(m.path):
                                        IC_details[i][j][k][l][m.name] = [m.path]
    return IC_details

IC_tree = dir_tree(rootdir)

标签: python

解决方案


你应该看看'glob'模块:

glob — Unix 风格的路径名模式扩展¶


推荐阅读