Skip to main content

Iterate through a file tree

Project description

Project Status: Active — The project has reached a stable, usable state and is being actively developed. CI Status https://codecov.io/gh/jwodder/iterpath/branch/master/graph/badge.svg https://img.shields.io/pypi/pyversions/iterpath.svg MIT License

GitHub | PyPI | Issues | Changelog

iterpath lets you iterate over a file tree as a single iterator of pathlib.Path objects, eliminating the need to combine lists returned by os.walk() or recursively call Path.iterdir() or os.scandir(). Besides the standard os.walk() options, the library also includes options for sorting & filtering entries.

Installation

iterpath requires Python 3.6 or higher. Just use pip for Python 3 (You have pip, right?) to install it:

python3 -m pip install iterpath

Example

Iterate over this library’s source repository, skipping the .git and test/data folders:

>>> import os.path
>>> from iterpath import iterpath
>>> def filterer(dir_entry):
...     if dir_entry.name == ".git":
...         return False
...     elif dir_entry.path == os.path.join(".", "test", "data"):
...         return False
...     else:
...         return True
...
>>> for p in iterpath(".", sort=True, filter_dirs=filterer):
...     print(p)
...
.github
.github/workflows
.github/workflows/test.yml
.gitignore
LICENSE
MANIFEST.in
README.rst
TODO.md
pyproject.toml
setup.cfg
src
src/iterpath
src/iterpath/__init__.py
src/iterpath/__pycache__
src/iterpath/__pycache__/__init__.cpython-39.pyc
src/iterpath/py.typed
test
test/test_iterpath.py
tox.ini

API

The iterpath module provides a single function, also named iterpath:

iterpath(dirpath: Union[AnyStr, os.PathLike[AnyStr]] = os.curdir, **kwargs) -> Iterator[pathlib.Path]

Iterate through the file tree rooted at the directory dirpath (by default, the current directory) in depth-first order, yielding the files & directories within. If dirpath is an absolute path, the generated Path objects will be absolute; otherwise, if dirpath is a relative path, the Path objects will be relative and will have dirpath as a prefix.

Note that, although iterpath() yields pathlib.Path objects, it operates internally on os.DirEntry objects, and so any function supplied as the sort_key parameter or as a filter/exclude parameter must accept os.DirEntry instances.

Keyword arguments:

dirs: bool = True

Whether to include directories in the output

topdown: bool = True

Whether to yield each directory before (True) or after (False) its contents

include_root: bool = False

Whether to include the dirpath argument passed to iterpath() in the output

followlinks: bool = False

Whether to treat a symlink to a directory as a directory

onerror: Optional[Callable[[OSError], Any]] = None

Specify a function to be called whenever an OSError is encountered while iterating over a directory. If the function reraises the exception, iterpath() aborts; otherwise, it continues with the next directory. By default, OSError exceptions are ignored.

sort: bool = False

Sort the entries in each directory. When False, entries are yielded in the order returned by os.scandir(). When True, entries are sorted, by default, by filename in ascending order, but this can be changed via the sort_key and sort_reverse arguments.

sort_key: Optional[Callable[[os.DirEntry[AnyStr]], _typeshed.SupportsLessThan]] = None

Specify a custom key function for sorting directory entries. Only has an effect when sort is True.

sort_reverse: bool = False

Sort directory entries in reverse order. Only has an effect when sort is True.

filter_dirs: Optional[Callable[[os.DirEntry[AnyStr]], Any]] = None

Specify a predicate to be applied to all directories encountered; only those for which the predicate returns a true value will be yielded & descended into

filter_files: Optional[Callable[[os.DirEntry[AnyStr]], Any]] = None

Specify a predicate to be applied to all files encountered; only those for which the predicate returns a true value will be yielded

exclude_dirs: Optional[Callable[[os.DirEntry[AnyStr]], Any]] = None

Specify a predicate to be applied to all directories encountered; only those for which the predicate returns a false value will be yielded & descended into

exclude_files: Optional[Callable[[os.DirEntry[AnyStr]], Any]] = None

Specify a predicate to be applied to all files encountered; only those for which the predicate returns a false value will be yielded

Warnings:

  • If dirpath is a relative path, changing the working directory while iterpath() is in progress will lead to errors, or at least inaccurate results.

  • Setting followlinks to True can result in infinite recursion if a symlink points to a parent directory of itself.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iterpath-0.2.0.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

iterpath-0.2.0-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file iterpath-0.2.0.tar.gz.

File metadata

  • Download URL: iterpath-0.2.0.tar.gz
  • Upload date:
  • Size: 11.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.9.1

File hashes

Hashes for iterpath-0.2.0.tar.gz
Algorithm Hash digest
SHA256 08237356dded866d85101047aa9fee6e7bd718dfacebd6db30d36e5091da9f21
MD5 c3b26a74901673e578ae290bfa92991f
BLAKE2b-256 aa4ca15ba585b9aa4d1c7503491c21eac3ae2f98f998a17524c72c29866e08a8

See more details on using hashes here.

File details

Details for the file iterpath-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: iterpath-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.9.1

File hashes

Hashes for iterpath-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1745054dbe5c2ad96fe7785cc008ce950d73c7be758812f6bfae94f32e0ef007
MD5 150d6b8afffc9dca0d78c53c9e98db52
BLAKE2b-256 582f753f30dc209a10625dfedc25d1c6f57d2bd3138f17f04dbd98a475c660d6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page