Idiomatic Python 2/3 pathlib vs. os.path

1 minute read

Related: Require minimum Python version:

pathlib is an object-oriented, Python standard library way to handle paths and filenames vs. “dumb” strings. pathlib.Path() replaces most cumbersome code from os.path and glob.glob.

pathlib is standard library for Python ≥ 3.5, supported throughout Python ≥ 3.6 natively, as well as in SciPy, Numpy, et al.


This examples eliminates messy os.path.join():

filename = pathlib.Path('mydir/a/b') / 'myfile'


pathlib is very efficient, for example with Python 3.6.2 and Ipython 6.1.0:

%timeit Path('~')
2.46 µs ± 24.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit Path('~').expanduser()
7.35 µs ± 7.13 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Install pathlib: Python ≤ 3.4

Python standard library pathlib can be used for Python ≥ 2.6 via

python -m pip install pathlib2

Import pathlib: Python 2/3 compatible

Use pathlib for Python ≥ 2.6 by

  1. put in
        from pathlib import Path
    except (ImportError,AttributeError):
        from pathlib2 import Path
  2. in the other module .py files (same directory as
    from . import Path

file globbing

Pathlib can glob like GNU find:

pathlib.Path.glob() recursively searches for files.

Example: search for all .py files in your ~ home directory:

allpy = pathlib.Path('~').expanduser().glob('*.py')

allpy is a generator that you can either

  • iterate over with a for loop
  • enclose in sorted() to get a list. flist = sorted(allpy)




Leave a Comment