J'ai insensé grand répertoire. J'ai besoin d'obtenir un fileleur via Python.
dans le code, j'ai besoin d'obtenir itérateur, pas de liste. Donc, cela ne fonctionne pas: p> Je ne peux pas trouver de bonne lib. aider! Peut-être c ++ lib? P> p>
9 Réponses :
Je pense que l'utilisation de Opendir travaillerait et il y a un package Python: http: // pypi.python.org/pypi/opendir/0.0.1 qui l'enveloppe via Pyrex P>
sonne bien, mais ne peut pas installer sous Windows ... Fichier "C: \ Python26 \ LIB \ Sites-Sites-Packages \ PYREX-0.9.9-PY2.6.EGG \ PYREX \ D ISTUTILS \ extension.p y", ligne 69, dans init b> ** kw) TypeError: méthode non liée __init __ () doit être appelée à l'instance d'extension comme premier argument (instance d'extension obtenue)
http://docs.python.org/ Libération / 2.6.5 / Bibliothèque / OS.HTML # OS.WALK
>>> import os >>> type(os.walk('/')) <type 'generator'>
Malheureusement, Os.walk utilise listDir code> interne
.
Si vous avez un répertoire trop gros pour Libc ReadDir () pour le lire rapidement, vous voulez probablement regarder les getdents d'appel du noyau () (
Vous devez utiliser Generator. Ce problème est discuté ici: http://bugs.python.org/issue11406 P>
Que diriez-vous de glob.iglob? C'est l'itérateur Glob. P>
C'est un générateur avec une liste derrière les rideaux, alors pourquoi ne pas appeler la liste directement?
pour python 2.x pour python 3.5 + p>
Quelqu'un a construit un module Python éteint cet article qui enveloppe Ce module semble être comme si cela aurait été une alternative intéressante. Ne l'avez pas utilisé, mais il a basé sur 8 millions de fichiers. L'article est référencé ci-dessus. Lecture par le code, pensant que cela aurait été amusant et plus rapide à utiliser. p>
vous permet également de modifier le tampon sans avoir à entrer directement dans C directement. P>
https://github.com/zipfile/python-gets
Et via PIP et PYPI si je recommande de lire les docs. P>
getdents code>. BTW, je sais que ce post est vieux, mais vous pouvez utiliser
scandir code> (et je l'ai fait avec DIRS avec 21 millions de fichiers). La marche est trop lente, mais elle est aussi un générateur mais trop aérien. p>
J'ai trouvé cette bibliothèque vraiment rapide.
https://pypi.org/project/scandir/
J'ai utilisé ci-dessous le code de cette bibliothèque, cela a fonctionné comme un charme.
def subdirs(path): """Yield directory names not starting with '.' under given path.""" for entry in os.scandir(path): if not entry.name.startswith('.') and entry.is_dir(): yield entry.name
On dirait un duplicata de Existe-t-il un moyen de produire efficacement chaque fichier dans un répertoire contenant des millions de fichiers? < / i>.
Oh oui. ne trouve pas ce post par recherche ...