Recursively iterate through all subdirectories using pathlib

PythonPython 3.xPathlib

Python Problem Overview


How can I use pathlib to recursively iterate over all subdirectories of a given directory?

p = Path('docs')
for child in p.iterdir(): child

only seems to iterate over the immediate children of a given directory.

I know this is possible with os.walk() or glob, but I want to use pathlib because I like working with the path objects.

Python Solutions


Solution 1 - Python

Use Path.rglob (substitutes the leading ** in Path().glob("**/*")):

path = Path("docs")
for p in path.rglob("*"):
     print(p.name)

Solution 2 - Python

You can use the glob method of a Path object:

p = Path('docs')
for i in p.glob('**/*'):
     print(i.name)

Solution 3 - Python

To find just folders the right glob string is:

'**/'

So to find all the paths for all the folders in your path do this:

p = Path('docs')
for child in p.glob('**/'):
    print(child)

If you just want the folder names without the paths then print the name of the folder like so:

p = Path('docs')
for child in p.glob('**/'):
    print(child.name)

Solution 4 - Python

pathlib has glob method where we can provide pattern as an argument.

For example : Path('abc').glob('**/*.txt') - It will look for current folder abc and all other subdirectories recursively to locate all txt files.

Solution 5 - Python

Use list comprehensions:

(1) [f.name for f in p.glob("**/*")]  # or
(2) [f.name for f in p.rglob("*")]

You can add if f.is_file() or if f.is_dir() to (1) or (2) if you want to target files only or directories only, respectively. Or replace "*" with some pattern like "*.txt" if you want to target .txt files only.

See this quick guide.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOblomovView Question on Stackoverflow
Solution 1 - PythonpylangView Answer on Stackoverflow
Solution 2 - PythonJacques GaudinView Answer on Stackoverflow
Solution 3 - PythonTKKView Answer on Stackoverflow
Solution 4 - PythonSijan BhandariView Answer on Stackoverflow
Solution 5 - PythondzenileeView Answer on Stackoverflow