如何循环文件夹并跳过一个

2024-10-01 09:16:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,我想跳过迭代中的“NetIQ”文件夹,但我想我遗漏了一些东西,因为我在运行代码时仍然从该文件夹中获取文件,请帮助

path = "C:\User\Work\Identity\TestFolders"

def list_files(dir):
    r = []
    skip = ["NetIQ"]
    for root, dirs, files in os.walk(dir):
        if dirs in skip:
            continue
        else:
            for name in files:
                r.append(os.path.join(root, name))
    return r

print(list_files(path))

Tags: path代码namein文件夹forosdir
3条回答

我认为您对这个for循环的输出的期望是错误的os.walk对目录进行深度优先搜索,并将为每个子目录生成新的输出(rootdirsfiles)。所以如果你说

if dirs in skip:
    continue

这将仅适用于NetIQ实际所在的目录-检查,此文件夹中的文件应丢失

有关解决方案,请参阅其他答案

这是因为dirs不是字符串,而是元组。你可以看一下文档here。 您可以检查元组中的第一项是否在skip中:

def list_files(dir):
    r = []
    skip = ["omegleClient"]
    for root, dirs, files in os.walk(dir):
        if dirs[0] not in skip:
            for name in files:
                r.append(os.path.join(root, name))
    return r

或者检查元组中是否有任何项在skip中,如下所示:

def list_files(dir):
    r = []
    skip = ["omegleClient"]
    for root, dirs, files in os.walk(dir):
        if not any(d in dirs for d in skip):
            for name in files:
                r.append(os.path.join(root, name))
    return r

尝试一个列表:

def list_files(dir):
    r = []
    skip = ["NetIQ"]
    for root, dirs, files in os.walk(dir):
        dirs[:] = [d for d in dirs if d not in skip]
        for name in files:
          r.append(os.path.join(root, name))

    return r

print(list_files(path))

相关问题 更多 >