Function for examine content of directory

MRAB python at mrabarnett.plus.com
Thu Sep 6 11:20:30 EDT 2012


On 06/09/2012 15:56, Tigerstyle wrote:
> Hi guys,
>
> I'm trying to write a module containing a function to examine the contents of the current working directory and print out a count of how many files have each extension (".txt", ".doc", etc.)
>
> This is the code so far:
> --
> import os
>
> path = "v:\\workspace\\Python2_Homework03\\src\\"
> dirs = os.listdir( path )
> filenames = {"this.txt", "that.txt", "the_other.txt","this.doc","that.doc","this.pdf","first.txt","that.pdf"}
> extensions = []
> for filename in filenames:
>      f = open(filename, "w")
>      f.write("Some text\n")
>      f.close()
>      name , ext = os.path.splitext(f.name)
>      extensions.append(ext)
>
> # This would print all the files and directories
> for file in dirs:
>      print(file)
>
> for ext in extensions:
>      print("Count for %s: " %ext, extensions.count(ext))
>
> --
>
> When I'm trying to get the module to print how many files each extension has, it prints the count of each ext multiple times for each extension type. Like this:
>
> this.pdf
> the_other.txt
> this.doc
> that.txt
> this.txt
> that.pdf
> first.txt
> that.doc
> Count for .pdf:  2
> Count for .txt:  4
> Count for .doc:  2
> Count for .txt:  4
> Count for .txt:  4
> Count for .pdf:  2
> Count for .txt:  4
> Count for .doc:  2
>
That's because each extension can occur multiple times in the list.

Try the Counter class:

from collections import Counter

for ext, count in Counter(extensions).items():
     print("Count for %s: " % ext, count)




More information about the Python-list mailing list