12
votes

Meilleur moyen d'obtenir une liste des fichiers du grand répertoire sur Python?

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: xxx

Je ne peux pas trouver de bonne lib. aider! Peut-être c ++ lib?


2 commentaires

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 ...


9 Réponses :


0
votes

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


1 commentaires

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 ** kw) TypeError: méthode non liée __init __ () doit être appelée à l'instance d'extension comme premier argument (instance d'extension obtenue)



-1
votes

http://docs.python.org/ Libération / 2.6.5 / Bibliothèque / OS.HTML # OS.WALK

>>> import os
>>> type(os.walk('/'))
<type 'generator'>


1 commentaires



1
votes

J'ai trouvé cette bibliothèque utile: https://github.com/benhoyt/scandir .


0 commentaires

-2
votes

Que diriez-vous de glob.iglob? C'est l'itérateur Glob.


1 commentaires

C'est un générateur avec une liste derrière les rideaux, alors pourquoi ne pas appeler la liste directement?



13
votes

0 commentaires

0
votes

Quelqu'un a construit un module Python éteint cet article qui enveloppe getdents . BTW, je sais que ce post est vieux, mais vous pouvez utiliser scandir (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.

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.

vous permet également de modifier le tampon sans avoir à entrer directement dans C directement.

https://github.com/zipfile/python-gets Et via PIP et PYPI si je recommande de lire les docs.

https://pypi.org/project/getdents/


0 commentaires

0
votes

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


0 commentaires