Simplest/Idiomatic way to count files in a directory (using pathlib)

Ian Kelly ian.g.kelly at gmail.com
Mon Jun 22 18:48:23 EDT 2015


On Mon, Jun 22, 2015 at 4:33 PM, Travis Griggs <travisgriggs at gmail.com> wrote:
> <I should proof my posts before I send them, sorry>
>
> Subject nearly says it all.
>
> If i’m using pathlib, what’s the simplest/idiomatic way to simply count how many files are in a given directory?
>
> I was surprised (at first) when
>
>    len(self.path.iterdir())
>
> didn’t work.

len doesn't work on iterators for a number of reasons:

* It would exhaust the iterator, preventing further use.
* The iterator is not necessarily finite.
* Even if it's finite, the length is not necessarily deterministic.
Consider this simple generator:

def gen():
    while random.randrange(2):
        yield 42

> I don’t see anything in the .stat() object that helps me.
>
> I could of course do the 4 liner:
>
>    count = 0
>    for _ in self.path.iterdir():
>        count += 1
>    return count
>
> The following seems to obtuse/clever for its own good:
>
>    return sum(1 for _ in self.path.iterdir())

This is the usual idiom for counting the number of items yielded from
an iterator. Alternatively you can use len(list(self.path.iterdir()))
if you don't mind constructing a list of the entire directory listing.



More information about the Python-list mailing list