Kodi Community Forum
Python file counting script - Printable Version

+- Kodi Community Forum (https://forum.kodi.tv)
+-- Forum: Support (https://forum.kodi.tv/forumdisplay.php?fid=33)
+--- Forum: Add-on Support (https://forum.kodi.tv/forumdisplay.php?fid=27)
+--- Thread: Python file counting script (/showthread.php?tid=13443)



- ea1776 - 2005-07-11

does anyone know a (python) script for counting the number of files within a directory and all its subfolders? for example, how could i find the number of .mp3 files that exist on c:\ ?

basically, i want to calculate an average size for all the .mp3 files on a specified drive. surely someone knows how to do that...
thanks!


- Bernd - 2005-07-11

i don't know of any ready to use python module.
but you should check out os-module. it has a listdir()-method to display folder contents.
to get the filesize use stat() from os.

this combined with some recursion should get you started.

bernd


- ea1776 - 2005-07-11

thanks. i found some help from another forum. here is a script which returns the average file size (.mp3 and .wav) of specified directory:

######################################################
# avgfilesize.py
# this python script prints out the average file size
# for a specified directory in kb.
# this script searches all folders and subfolders in
# the specified directory "direc."
# to change the directory this script searches,
# modify the "direc" variable below. for example,
# direc = "c:\music\the beatles"
######################################################

import os
from os.path import join, getsize

# ****************************************************
# change the directory here...

direc = "h:\my music"

# ****************************************************

######################################################
# function which returns the average file size of
# files with extensions "ending1" or "ending2"
# in the directory "startdir"
######################################################
def summarize(startdir, ending1, ending2):
size_sum = 0
number_of_files = 0

# search all of the folders and subfolders in "startdir"
for root, dirs, files in os.walk(startdir):
for name in files:
if name.endswith(ending1) or name.endswith(ending2):
number_of_files += 1
size_sum += getsize(join(root, name))
# calculate average in bytes
return size_sum / number_of_files

#######################################################

# call function to calculate average
average = summarize(direc, ".mp3", ".wma")

# figure average in kb...
avginkb = average/1024

# print message to user
print "average file size for ", direc, " is ", avginkb, " kb"
[code]


- Bernd - 2005-07-13

great,
must have overlooked os.walk(). it does exactly what you wanted.

but as a real python-developer you would of course pass a regular expression to specify which files to count instead of ending1 and ending2. :d

bernd


- ea1776 - 2005-07-13

> pass a regular expression to specify which files to count instead > of ending1 and ending2

what do you mean by this? what do you mean by "regular expression?" do you mean prompt the user for input?