Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to skip directories in os walk Python 2.7

I have written an image carving script to assist with my work. The tool carves images by specified extention and compares to a hash database.

The tool is used to search across mounted drives, some which have operating systems on.

The problem I am having is that when a drive is mounted with an OS, it is searching across the 'All Users' directory, and so is including images from my local disc.

I can't figure out how to skip the 'All Users' directory and just stick to the mounted drive.

My section for os.walk is as follows:

for path, subdirs, files in os.walk(root):
    for name in files:
        if re.match(pattern, name.lower()):
                appendfile.write (os.path.join(path, name))
                appendfile.write ('\n')
                log(name)
                i=i+1

Any help is much appreciated

like image 632
user3450524 Avatar asked Jul 16 '15 08:07

user3450524


People also ask

How do you exclude a directory in Python?

You can exclude a directory by right-clicking on it and selecting Mark Directory as → Excluded. JetBrains' website has an article called Configuring Folders Within a Content Root which has additional insights on how and why you might want to configure the folders in the project.

How do you go to a specific path in Python?

chdir() method in Python used to change the current working directory to specified path. It takes only a single argument as new directory path.

How do I change directories in Python Mac?

To find the current working directory in Python, use os. getcwd() , and to change the current working directory, use os. chdir(path) .

How do I change the path of a directory in Python?

To change the current working directory(CWD) os. chdir() method is used. This method changes the CWD to a specified path. It only takes a single argument as a new directory path.


1 Answers

Assuming All Users is the name of the directory, you can remove the directory from your subdirs list, so that os.walk() does not iterate over it.

Example -

for path, subdirs, files in os.walk(root):
    if 'All Users' in subdirs:
        subdirs.remove('All Users')
    for name in files:
        if re.match(pattern, name.lower()):
                appendfile.write (os.path.join(path, name))
                appendfile.write ('\n')
                log(name)
                i=i+1

If you only want to not walk for All Users inside a particular parent, you can include the check for that as well in the above if condition.

From os.walk documentation -

os.walk(top, topdown=True, onerror=None, followlinks=False)

Generate the file names in a directory tree by walking the tree either top-down or bottom-up. For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple (dirpath, dirnames, filenames).

When topdown is True, the caller can modify the dirnames list in-place (perhaps using del or slice assignment), and walk() will only recurse into the subdirectories whose names remain in dirnames; this can be used to prune the search, impose a specific order of visiting, or even to inform walk() about directories the caller creates or renames before it resumes walk() again. Modifying dirnames when topdown is False is ineffective, because in bottom-up mode the directories in dirnames are generated before dirpath itself is generated.

topdown is normally true, unless specified otherwise.

like image 59
Anand S Kumar Avatar answered Sep 21 '22 14:09

Anand S Kumar