# standard imports import os import typing # exports __all__: typing.Sequence[str] = ( 'list_files', ) ## code ## def list_files( roots: typing.Iterable[str], recursive: bool = True, follow_symlinks: bool = True, ) -> typing.Iterator[str]: """Iterate over all files in *roots*, recursively by default.""" # index input paths for path in roots: if not os.path.exists(path): continue if os.path.isdir(path) and recursive: for dirpath, _, filenames in os.walk(path, topdown=True, followlinks=follow_symlinks): for filename in filenames: yield os.path.join(dirpath, filename) if os.path.isfile(path): yield path ## EOF ##