Python 如何循环文件夹并跳过一个
我有下面的代码,我想跳过迭代中的“NetIQ”文件夹,但我想我遗漏了一些东西,因为我在运行代码时仍然从该文件夹中获取文件,请帮助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:
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
不是一个字符串