Travis Griggs wrote: > 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()) > > I don’t say anything on the 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())
Put the "cleverness" into its own function def iterlen(items): return sum(1 for _ items) num_files = iterlen(path.iterdir()) With the proper unit tests in place you may even switch to more exotic approaches later: def iterlen(items): """Exhaust an iterator an return the number of items. Does not check for a __len__() method. >>> iterlen(()) 0 >>> iterlen([42]) 1 >>> iterlen("abc") 3 >>> class A: ... def __len__(self): return 42 ... def __iter__(self): yield from "abc" >>> a = A() >>> len(a) 42 >>> iterlen(a) 3 """ d = collections.deque(enumerate(items, 1), maxlen=1) return d.pop()[0] if d else 0 -- https://mail.python.org/mailman/listinfo/python-list