Working With The File System in Python

This tutorial was written using Python 3.6

Being able to work with the file system and do things like traverse directories or retrieve every file can be very handy in a number of different situations.

In this tutorial we’ll be taking a look at the various ways you can work with the file system in Python. Hopefully this will give you a decent grasp of some of the cool things you can do very quickly and succinctly using the Python programming language.

Recursing Through Directories

In some situations you may need to recurse through directory after directory. This could be for any number of reasons.

In this example let’s look at how we can walk through a directory and retrieve the names of all the files:

# This will walk through EVERY file in your computer
import os

# You can change the "/" to a directory of your choice
for file in os.walk("/"):
    print(file)

Output

Let’s see this in action in a directory that has 3 distinct files in it: ['test2.txt, 'test.txt', 'main.py']

>>> import os
>>> os.walk("./")
<generator object walk at 0x10457c7d8>
>>> for file in os.walk("./"):
...     print(file)
...
('./', [], ['test2.txt', 'test.txt', 'main.py'])

Checking Whether File Or Directory?

Being able to discern whether something is a file or directory can come in handy. Let’s look at how you can check whether something is either a file or directory in Python.

To do this we can use the os.path.isfile() function which returns False if it’s a directory or True if it is indeed a file.

>>> import os
>>> os.path.isfile("/")
False
>>> os.path.isfile("./main.py")
True

Checking if a File or Directory Exists

If you wanted to check whether something exists on your current machine you can use the os.path.exists() function, passing in the file or directory you wish to check:

>>> import os
>>> os.path.exists("./main.py")
True
>>> os.path.exists("./dud.py")
False

Creating Directories in Python

Say you not only wanted to traverse directories but also wished to create your own. Well fear not, this is very possible using the os.makedirs() function.

if not os.path.exists('my_dir'):
    os.makedirs('my_dir')

This will first go ahead and check to see if the directory my_dir exists, if it doesn’t exist then it will go ahead and call the os.makedirs('my_dir') in order to create our new directory for us.

It should be noted that this could potentially cause issues. If you were to create the directory after checking that the directory doesn’t exist somewhere else, before your call to os.makedirs('my_dir') executes, you could see an OSError thrown.

For the most part however you should be ok using the method mentioned above. If you want to be extra careful and catch any potential exceptions then you can wrap you call to os.makedirs('my_dir') in a try...except like so:

if not os.path.exists('my_dir'):
    try:
        os.makedirs('my_dir')
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise

Conclusion

If you found this tutorial useful or require further help then please feel free to let me know in the comments section below or message me @Elliot_f.