In this program we'll use the powerful
'os' module introduced in the first article. This time our focus will be on its
'walk' function, which scans the file system then returns a list of files and their locations. We'll use this function to search for specific types of file based on their name.
Let's start by creating another new file with Geany and saving it into the Desktop's Python folder with the name
'walk.py'. Now enter the source code, saving frequently and taking care with quotes, colons and line indentations.
Now, let's step through the code. The first two lines contain our program description comments. These are followed by the
'import os' statement on line 4.
Next we obtain some user supplied search data. On line 6 we use the 'raw_input' function to capture the starting directory for our search, and store it in
'root'. Line 7 does a similar thing to capture a file ending string and store it in
The For Loop
Now we come to the meat of the program, contained in lines 11 to 18.As you can see, we actually have two
'for'loops, with the second one inside the first. With Python, as with most languages, we can have as many loops within loops as we like. Creating a hierarchy of loops is a frequently used programming technique.
'for' loops use the same format we saw earlier. However, the one on line 11 looks a little different as it has three variables before the
'in' keyword. I'll not dwell on this for now, but just to note functions that return multiple variables is just one of Python's powerful features.
'os.walk' do? Well, as the comment suggests, it finds all the files and sub-directories in the supplied start directory. Then, for each subdirectory, it again finds all the files and sub-directories. This process is repeated until all the sub-directories have been searched.
Now for the three returned variables. The first,
'path', is just a simple string. However, the next two,
'files', are list-type variables. A list-type variable holds a collection of items. We're only interested in
'files' which contains a list of file names.
'files' contains a list of files we can use the
'for' loop on line 14 to extract each file name from the list in turn, and assign it to a variable called
Now we have a file name we can see if it ends with the string we entered earlier. This is done with the
'if' statement on line 17 and a string method called
'endswith'. (Note: Python has many string methods)
Let's imagine we entered
'.py' as the file ending string. The test will see if
'fileName' ends with
'.py'. If it does the test will be
'True', and the indented print statement on line 18 will be called. If no match is found, the test is
'False' and nothing is printed. So, only files which end in
'.py' will be printed out.
Execute And Experiment
And that's the end of our 'walk' program. Use the Geany
'Build->Execute menu option, or press the
F5 key, to run the program. Try entering '/home' as the starting directory and
'.py' as the file ending. If you see an error message instead, go through the debugging process we described above until it runs successfully.
Feel free to experiment with different 'ending' strings. For example, using
'.conf' should display some configuration files. And you can also try different start directories. A single period string
'.' means the current directory. A value of
'/etc' will find more Python files. While entering
'/' will scan the complete file system - something that might take a little time to run, and could generate hundreds of file matches.
You can, of course, change the program too. One idea is to replace the
'endswith' function with
'startswith' to find all files starting with a specific string.
A post from my Learn Python on the Raspberry Pi tutorial.