如何在目录中多次查找特定文件夹?

时间:2019-07-15 21:25:30

标签: python

我正在使用包含多个结构相似的文件夹的目录。我想在此目录中多次找到一个文件夹。摆弄里面的文件。然后继续os.walk()直到再次找到该文件夹​​,然后重复该过程。

示例:

directory:
    ----X3
        ----Tim
        ----Jan
        ----Eric
    ----X4
        ----Tim
        ----Jan
        ----Eric

我想找到“ Tim”文件夹的两个实例,并在其中执行类似的操作。

作为旁注,如果我也能获得其上方的文件夹名称,那也将非常有帮助。因此“ Tim”文件夹中的文件可以命名为“ X3-Tim-ThingIWantToDo.file”和“ X4-Tim-ThingIWantToDo.file”

我知道os.walk()可以完整浏览目录。它可以很容易地找到特定文件。查找特定文件夹显然要困难得多。

for folderName, subfolders, filenames in os.walk('C:\\'):
    print('The current folder is ' + folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
    for filename in filenames:
        print('FILE INSIDE ' + folderName + ': '+ filename)

这非常适合仅列出所有内容。但是我想要的是,当folderName路径包含我要查找的文件名时,我的thingIWantToDO()代码将执行,然后继续。

类似的东西

for folderName, subfolders, filenames in os.walk('C:\\'):
        if folderName contains 'Tim':
            andFolderContainingTim = folderName[:-10] #or some number.
            thingIWantToDO(folderName, andFolderContainingTim)

我想从此os.walk()中保存两件事, *首先,位于特定搜索文件夹上方的文件夹。 (X3到Tim) *其次,获取文件夹路径,以便我的其余代码可以继续工作。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用pathlib

mkdir A A/1 A/2 A/3 B B/1 B/3 B/4

.
├── A
│   ├── 1
│   ├── 2
│   └── 3
└── B
    ├── 1
    ├── 3
    └── 4
from pathlib import Path

def find_all(name):
    return list(p for p in Path().glob("**/"+name) if p.is_dir() )

find_all("1")
>>>[PosixPath('A/1'), PosixPath('B/1')]

请注意,返回的列表由Path instances组成,但是您可以将p包裹在str(p)中以获取名称。

从这些Path实例中,很容易获得父目录:

dirs = find_all("1")
parent_directories = [p.parent for p in dirs]
>>> [PosixPath('A'), PosixPath('B')]