Je voudrai coder un programme qui prend le chemin absolu d'un répertoire et affiche des infos sur la tailles des fichiers contenus dans ce répertoire de la manière suivante :
13 documents use 6Mo (10% of total size)
12 pictures use 60Mo (90% of total size)
0 others use 0Mo (0% of total size)
J'ai écrit un code que je mets à la fin du message.
Il marche très bien pour les répertoires ne contenant pas de sous-répertoires. Mais dès qu'il y en a, je constate que les fichiers dans ces sous-repertoires ne sont pas comptabilisés. Pourtant, ma fonction s'appelle elle même quand elle rencontre des sous-répertoires.
Les valeurs que me renvoient les sommes à la fin du code ne sont pas cohérentes non plus.
Bien à vous.
import os
import os.path
e_documents=[".pdf",".html",".rtf",".txt"]
e_images=[".png",".jpg",".jpeg"]
e_videos=[".mpg",".avi",".mp4",".mov"]
def taille(chemin_absolu): #donne la taille totale du répertoire dont le chemin absolu est donné en parametre
t=0
for chemin, noms_sous_repertoires, noms_fichiers in os.walk(chemin_absolu):
for f in noms_fichiers:
f_chemin=os.path.join(chemin,f)
t+=os.path.getsize(f_chemin)
return t
def documents(racine):
fichiers=os.listdir(racine)
fichiers=[os.path.join(racine,f) for f in fichiers if (os.path.isfile(os.path.join(racine,f)))&(os.path.splitext(f)[1].lower() in e_documents)]
n=len(fichiers)
t=0
for s in fichiers:
t+=os.path.getsize(s)
return [n,t]
def images(racine):
fichiers=os.listdir(racine)
fichiers=[os.path.join(racine,f) for f in fichiers if (os.path.isfile(os.path.join(racine,f)))&(os.path.splitext(f)[1].lower() in e_images)]
n=len(fichiers)
t=0
for s in fichiers:
t+=os.path.getsize(s)
return [n,t]
def autres_fichiers(racine):
fichiers=os.listdir(racine)
fichiers=[os.path.join(racine,f) for f in fichiers if (os.path.splitext(f)[1].lower() not in e_images+e_documents) & (os.path.isfile(os.path.join(racine,f)))]
n=len(fichiers)
t=0
for s in fichiers:
t+=os.path.getsize(s)
return [n,t]
def calcule(racine):
n_documents=0
n_images=0
n_autres=0
t_documents=0
t_images=0
t_autres=0
fichiers=os.listdir(racine)
for f in fichiers:
if os.path.isdir(f):
r=calcule(os.path.join(racine,f))
n_documents+=r[0]
n_images+=r[1]
n_autres+=r[2]
t_documents+=r[3]
t_images+=r[4]
t_autres+=r[5]
d=documents(racine)
i=images(racine)
a=autres_fichiers(racine)
n_documents+=d[0]
n_images+=i[0]
n_autres+=a[0]
t_documents+=d[1]
t_images+=i[1]
t_autres+=a[1]
return [n_documents, n_images, n_autres, t_documents, t_images, t_autres]
racine="/Users/usersos/Desktop/nom_repertoire"
[n_documents, n_images, n_autres, t_documents, t_images, t_autres]=calcule(racine)
d=dict([])
t_totale=taille(racine)
p_documents=(t_documents*100)/t_totale
p_images=(t_images*100)/t_totale
p_autres=(t_autres*100)/t_totale
print("Somme des pourcentages :")
print(p_documents+p_images+p_autres)
print("Somme des tailles :")
print(t_documents+t_images+t_autres)
print("Taille du répertoire racine :")
print(t_totale)
d["documents"]=[n_documents,t_documents,p_documents]
d["pictures"]=[n_images,t_images,p_images]
d["others"]=[n_autres,t_autres,p_autres]
for tf in d:
print("{} {} use {} ({} % of total size)".format(d[tf][0],tf,d[tf][1],d[tf][2]))
- Edité par sknbernoussi 13 novembre 2014 à 16:29:00
Infos répertoire
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.