Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何循环文件夹并跳过一个_Python - Fatal编程技术网

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

Python 如何循环文件夹并跳过一个,python,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:

我有下面的代码,我想跳过迭代中的“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))

尝试一个列表:

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))

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

if dirs in skip:
    continue
这仅适用于
NetIQ
实际所在的目录-检查,此文件夹中的文件应丢失


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

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

def列表_文件(dir):
r=[]
跳过=[“omegleClient”]
对于os.walk(dir)中的根目录、目录和文件:
如果目录[0]不在跳过中:
对于文件中的名称:
r、 追加(os.path.join(根,名称))
返回r
或者检查元组中是否有任何项在skip中,如下所示:

def列表_文件(dir):
r=[]
跳过=[“omegleClient”]
对于os.walk(dir)中的根目录、目录和文件:
如果没有(d在目录中,d在跳过中):
对于文件中的名称:
r、 追加(os.path.join(根,名称))
返回r

执行一个简单的调试:在python中引用文件路径时,如果在
之前打印出所使用的变量,则不应使用反斜杠。如果使用,可能会出现
语法错误
。实际上,您应该使用一个正斜杠或两个反斜杠。要按照您的想法进行测试,您需要针对
而不是
目录
进行测试。注意-
root
是一个完整路径-对于您正在处理的每个迭代,都是由
root
指示的目录
dirs
是该目录中的目录列表<代码>文件
是该目录中的文件列表。您的代码是“如果此目录还包含名为“NetIQ”的目录,请不要处理此目录中的文件。我认为这不是您想要的。如果您要防止遍历到“NetIQ”,则当您在那里找到它时,您希望将其从
dirs
中删除。这就是@Wasif的答案。你能解释一下这里发生了什么吗?一般不鼓励只使用代码的答案。我认为在这里,如果你不解释这里发生了什么以及为什么它与OP试图做的事情有很大的不同,那你就特别困惑了。@Steve hi,它做了什么,因为
dirs
不是一个字符串