Python Forum
How to skip a folder directory in a loop - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: How to skip a folder directory in a loop (/thread-31015.html)



How to skip a folder directory in a loop - mfkzolo - Nov-18-2020

Hi,

I have a code below:

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))
I want to skip "NetIQ" folder in my iteration, but I think I'm missing something there, please help.


RE: How to skip a folder directory in a loop - bowlofred - Nov-18-2020

This won't work. dirs is a list of all directories at the current point of the os.walk(). Your comparison will never match, and if it did match it wouldn't do anything useful.

If you want to not process that directory AND not descend into that directory, the easiest way is to just remove it from dirs before you descend further (which is the default behavior).

Example of a 3 level directory walk
import os
for root, dirs, files in os.walk("."):
    for file in files:
        print(f"Dealing with file {root}/{file}")
Output:
Dealing with file ./a/1 Dealing with file ./a/b/2 Dealing with file ./a/b/c/3 Dealing with file ./a/bb/22 Dealing with file ./a/bb/cc/33
Lets say I want to ignore the directory "b" (and any children). I remove it from dirs (so the walk will not enter), and then I can just process the files as normal.

import os
for root, dirs, files in os.walk("."):
    if "b" in dirs:
        dirs.remove("b")
    for file in files:
        print(f"Dealing with file {root}/{file}")
Output:
Dealing with file ./treewalk.py Dealing with file ./a/1 Dealing with file ./a/bb/22 Dealing with file ./a/bb/cc/33



RE: How to skip a folder directory in a loop - mfkzolo - Nov-18-2020

(Nov-18-2020, 07:34 AM)bowlofred Wrote: This won't work. dirs is a list of all directories at the current point of the os.walk(). Your comparison will never match, and if it did match it wouldn't do anything useful.

If you want to not process that directory AND not descend into that directory, the easiest way is to just remove it from dirs before you descend further (which is the default behavior).

Example of a 3 level directory walk
import os
for root, dirs, files in os.walk("."):
    for file in files:
        print(f"Dealing with file {root}/{file}")
Output:
Dealing with file ./a/1 Dealing with file ./a/b/2 Dealing with file ./a/b/c/3 Dealing with file ./a/bb/22 Dealing with file ./a/bb/cc/33
Lets say I want to ignore the directory "b" (and any children). I remove it from dirs (so the walk will not enter), and then I can just process the files as normal.

import os
for root, dirs, files in os.walk("."):
    if "b" in dirs:
        dirs.remove("b")
    for file in files:
        print(f"Dealing with file {root}/{file}")
Output:
Dealing with file ./treewalk.py Dealing with file ./a/1 Dealing with file ./a/bb/22 Dealing with file ./a/bb/cc/33

Hi,

Thanks for your response, it worked.