遍历目录,直到找到特定的文件夹名称

时间:2018-08-14 10:54:13

标签: python loops search directory

我想在目录中向下移动几层,直到找到一个以整数命名的文件夹,然后对该文件夹中的内容进行某些操作。重要的是,我仍然可以访问已处理文件夹的名称(整数),因为我使用该名称来命名操作的输出。我需要的文件夹名称中始终只有一个整数,没有其他字符。 我尝试了一个嵌套循环,该循环有效,但不幸的是,我的深度并不总是相同(有时会下降2个文件夹,有时甚至更多)

到目前为止,这是我所能得到的,它似乎可以在某些目录上工作,但对其他目录则什么也不返回。

for root, dirs, files in os.walk("directory"):
    for name in dirs:
        try:
            int(name.split("\\")[-1])
            print(os.path.join(root, name))
        except:
            continue

可能更好的方法是,一旦循环到达包含整数名称文件夹的文件夹,循环就会停止,然后对这些整数子文件夹执行某些操作。

最有效的方法是什么?

2 个答案:

答案 0 :(得分:0)

您的代码很好。我仅作了一些小改动,使其更具通用性。让我知道什么不起作用,例如丢失的目录路径,我将改善答案。

import os

def process_folders(root_dn, f, op):
    processed = []
    for root, dirs, files in os.walk(root_dn):
        for dn in dirs:
            if f(dn):
                path = os.path.join(root, dn)
                rv = op(dn, path)
                processed += [(dn, path, rv)]

    return processed

# This is the function that tests if the directory name is one you're looking for
def dn_filter(s):
    rv = True
    try:
        int(s)
    except:
        rv = False
    return rv
    # -or-
    #return s in in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

# This is the function that will process your directory. Return a value to indicate success
def dn_op(dn, path):
    print('Processing:', dn, 'at', path)
    return True

root_dn = '.'
processed = process_folders(root_dn, dn_filter, dn_op)
# Print all processed directories and their associated return values
for dn, path, success in processed:
    print(dn, path, success)

答案 1 :(得分:0)

import os
import re

def findDir(basePath):
    for root, dirs, files in os.walk(basePath):
        print(dirs)
        for name in dirs:
            try:
                if re.match("\\d", name):
                    return (root, name)
            except:
                continue
    return ('', '')



(r,n) = findDir("G:\\Kinetochore_3C_imaging")
print(n)
print(os.path.join(r, n))