J'ai besoin de parcourir tous les .asm
fichiers d'un répertoire donné et de faire quelques actions dessus.
Comment cela peut-il être fait de manière efficace?
Réponse originale:
import os
for filename in os.listdir(directory):
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Version Python 3.6 de la réponse ci-dessus, en utilisant os
- en supposant que vous avez le chemin du répertoire en tant str
qu'objet dans une variable appelée directory_in_str
:
import os
directory = os.fsencode(directory_in_str)
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Ou récursivement, en utilisant pathlib
:
from pathlib import Path
pathlist = Path(directory_in_str).glob('**/*.asm')
for path in pathlist:
# because path is object not string
path_in_str = str(path)
# print(path_in_str)
directory = os.fsencode(directory_in_str) for file in os.listdir(directory): filename = os.fsdecode(file) if filename.endswith(".asm") or filename.endswith(".py"): # print(os.path.join(directory, filename)) continue else: continue
print(os.path.join(directory, filename))
besoin d'être changé pourprint(os.path.join(directory_in_str, filename))
le faire fonctionner en python 3.6for entry in os.scandir(path): print(entry.path)
if filename.endswith((".asm", ".py")):
àif filename.endswith(".asm") or filename.endswith(".py"):
Cela parcourra tous les fichiers descendants, pas seulement les enfants immédiats du répertoire:
la source
Vous pouvez essayer d'utiliser le module glob :
et depuis Python 3.5, vous pouvez également rechercher des sous-répertoires:
De la documentation:
la source
Depuis Python 3.5, les choses sont beaucoup plus faciles avec os.scandir ( )
la source
entry
est un posix.DirEntry de type avec un tas de méthodes pratiques telles queentry.is_dir()
,is_file()
,is_symlink()
Python 3.4 et versions ultérieures proposent pathlib dans la bibliothèque standard. Vous pourriez faire:
Ou si vous n'aimez pas les listes de compréhension:
Path
les objets peuvent facilement être convertis en chaînes.la source
Voici comment j'itère les fichiers en Python:
AUCUNE DE CES TECHNIQUES NE GARANTIT TOUTE COMMANDE D'ITÉRATION
Oui, super imprévisible. Notez que je trie les noms de fichiers, ce qui est important si l'ordre des fichiers est important, par exemple pour les images vidéo ou la collecte de données en fonction du temps. Assurez-vous cependant de mettre des index dans vos noms de fichiers!
la source
from pkg_resources import parse_version
et l'afilenames.sort(key=parse_version)
fait.Vous pouvez utiliser glob pour référencer le répertoire et la liste:
Pour obtenir la liste de tous les répertoires du tableau, vous pouvez utiliser os :
la source
Je ne suis pas encore très satisfait de cette implémentation, je voulais avoir un constructeur personnalisé qui le fasse de
DirectoryIndex._make(next(os.walk(input_path)))
telle sorte que vous puissiez simplement passer le chemin pour lequel vous voulez une liste de fichiers. Modifications bienvenues!la source
J'aime vraiment utiliser la
scandir
directive intégrée à laos
bibliothèque. Voici un exemple de travail:la source