Bonjour à tous!
Je me permets de solliciter votre aide dans le cadre d'un mini projet que je dois effectuer.
Je suis débutant en Python et bien que je ne développe pas bcp ni super bien j'ai des notions de programmation provenant d'autres langages (C/C++, Java, VBA....),
Lors de mes études d'ingé, j'avais eu des cours de programmation parallèle (traités en C++), mais ce sont des souvenirs relativement lointains.
Pour ce mini projet d'entreprise (demandé par mon patron), je dois parcourir l'intégralité d'un répertoire de dossiers clients et en afficher "l'arborescence".
Concrètement par le biais de ce code :
J'arrive à afficher ce que je souhaite (bien qu'à terme l'idéal serait de mettre ces résultats dans un .csv en fonction des niveaux de profondeur).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 import os path="H:\\CLIENTS ACTIFS" ## print(len(os.listdir(path))) for dossier, sous_dossiers, fichiers in os.walk(path): print('##### %s #####' % dossier) print("Sous dossiers : %s" % sous_dossiers) print("Fichiers : %s" % fichiers)
Ce qui me pose problème c'est que ce traitement prend 40-45 min à s'exécuter car il y 400 dossiers contenant eux-mêmes une quantité importante de sous-dossiers et fichiers.
Ma question est : que me conseilleriez-vous pour réduire ce temps ?
Je pensais diviser le traitement en plusieurs boucles qui tourneraient en // (il me semble que c'est comme cela que je l'avais vu en C++).
Par exemple la 1ère traiterait les dossiers de 1 à 100, la 2ème de 101 à 200, la 3ème de 201 à 300 et la 4ème de 301 à 400, mais je ne sais absolument pas comment traiter ça car peut-être trop technique pour moi et si c'est envisageable en Python aussi.
De ce que j'ai pu lire, il ne me semble pas que threading, concurrent.futures, multiprocessing, gevent et greenlets ou celery pourraient y répondre.
Je vous remercie par avance.
Bonne journée,
Bastien
Partager