我有下面的代码,我想在我的迭代中跳过"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))发布于 2020-11-18 15:24:17
尝试一个列表理解:
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))发布于 2020-11-18 15:29:13
我认为您对这个for循环的输出的期望是错误的。os.walk首先对目录进行深度搜索,并为每个子目录生成新的输出(root、dirs和files)。所以如果你说
if dirs in skip:
continue这将仅适用于NetIQ实际所在的目录-检查,此文件夹中的文件应该丢失。
有关解决方案,请参阅其他答案...
发布于 2020-11-18 15:31:50
这是因为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或者检查元组中是否有任何项在跳过中,如下所示:
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 rhttps://stackoverflow.com/questions/64888575
复制相似问题