by Reuven M. Lerner
A look at the benefits of using pathlib, the "object-oriented way of dealing with
Working with files is one of the most common things developers
do. After all, you often want to read from files (to read information
saved by other users, sessions or programs) or write to files (to
record data for other users, sessions or programs).
Of course, files are located inside directories. Navigating through
directories, finding files in those directories, and even extracting
information about directories (and the files within them) might be
common, but they're often frustrating to deal with. In Python, a
number of different modules and objects provide such
functionality, including os.path, os.stat and glob.
This isn't necessarily bad; the fact is that Python developers have
used this combination of modules, methods and files for quite some
time. But if you ever felt like it was a bit clunky or old-fashioned,
you're not alone.
Indeed, it turns out that for several years already, Python's standard
library has come with the pathlib module, which makes it easier to
work with directories and files. I say "it turns out", because although I
might be a long-time developer and instructor, I discovered
"pathlib" only in the past few months—and I must admit, I'm
pathlib has been described as an object-oriented way of dealing with
paths, and this description seems quite apt to me. Rather than working
with strings, instead you work with "Path" objects, which not only
allows you to use all of your favorite path- and file-related
functionality as methods, but it also allows you to paper over the
differences between operating systems.
So in this article, I take a look at pathlib, comparing the ways you might
have done things before to how pathlib allows you to
do them now.
If you want to work with pathlib, you'll need to load it into
your Python session. You should start with:
Note that if you plan to use certain names from within pathlib on a
regular basis, you'll probably want to use from-import. However, I
strongly recommend against saying from pathlib import *, which
will indeed have the benefit of importing all of the module's names
into the current namespace, but it'll also have the negative effect
of importing all of the module's names into the current namespace. In
short, import only what you need.
Now that you've done that, you can create a new Path object. This
allows you to represent a file or directory. You can create it with a
string, just as you might do a path (or filename) in more traditional
Go to Full Article