Count Files in a Directory

Anand Pillai pythonguy at Hotpop.com
Mon Dec 22 09:23:50 CET 2003


If you are using Python 2.3, the new os.walk() function
is a better and faster choice.

Here is a sample code for counting files & sub-dirs recursively.
        
---------<snip>------<snip>-------------------

# dircount.py 
import os

dir_count, file_count=0, 0
for root, dirs, files in os.walk('.'):
    dir_count += len(dirs)
    file_count += len(files)

print 'Found', dir_count, 'sub-directories in cwd'
print 'Found', file_count, 'files in cwd'
print 'Found', dir_count + file_count, 'files & sub-directories in cwd'
---------<snip>------<snip>-------------------

-Anand

Jay Dorsey <jay at jaydorsey.com> wrote in message news:<mailman.20.1072053448.684.python-list at python.org>...
> On Sun, Dec 21, 2003 at 03:45:31PM -0800, hokiegal99 wrote:
> > I'm trying to count the number of files within a directory, but I
> > don't really understand how to go about it. This code:
> > 
> 
> Do you want the total number of files under one directory, or
> the number of files under each directory?
> 
> > for root, dirs, files in os.walk(path):
> >    for fname in files:
> >       x = str.count(fname)
> >       print x
> >
> > Produces this error:
> > 
> > TypeError: count() takes at least 1 argument (0 given)
> 
> str.count() is a string method used to obtain the number of 
> occurences of a substring in a string (try help(str.count))
> 
> >>> n = "this is a test"
> >>> n.count("test")
> 1
> 
> > 
> > for root, dirs, files in os.walk(path):
> >    for fname in files:
> >       x = list.count(files)
> >       print x
> > 
> > TypeError: count() takes exactly one argument (0 given)
> > 
> > Also wondered why the inconsistency in error messages (numeric 1 vs.
> > one)??? Using 2.3.0
> Similar problem here, for a list method ( try help(list.count)).
> 
> >>> n = ["test", "blah", "bleh"]
> >>> n.count("test")
> 1
> 
> In your example, fname would be an individual file name within a 
> directory list of files (in your example, the variable files).
> 
> What you probably want is len(), not count().  
> 
> If you want the number of files in each directory try:
> 
> >>> for root, dirs, files in os.walk(path):
> ... 	print len(files)
> 
> Or, for the total number of files:
> 
> >>> filecount = 0
> >>> for root, dirs, files in os.walk(path):
>  ...		filecount += len(files)	
> >>> print filecount
> 
> hth




More information about the Python-list mailing list