Comment puis-je parcourir les fichiers dans un répertoire donné?
J'ai besoin de parcourir tous les fichiers .asm
dans un répertoire donné et de faire quelques actions sur eux.
Comment cela peut-il être fait de manière efficiente?
6 réponses
Réponse originale:
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 qu'objet str
dans une variable appelée directory_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
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)
Cela parcourra tous les fichiers descendants, pas seulement les enfants immédiats du répertoire:
import os
for subdir, dirs, files in os.walk(rootdir):
for file in files:
#print os.path.join(subdir, file)
filepath = subdir + os.sep + file
if filepath.endswith(".asm"):
print (filepath)
Python 3.4 et versions ultérieures offrent pathlib dans la bibliothèque standard. Vous pourriez faire:
from pathlib import Path
asm_pths = [pth for pth in Path.cwd().iterdir()
if pth.suffix == '.asm']
Ou si vous n'aimez pas les compréhensions de liste:
asm_paths = []
for pth in Path.cwd().iterdir():
if pth.suffix == '.asm':
asm_pths.append(pth)
Path
les objets peuvent facilement être convertis en chaînes.
Je ne suis pas encore satisfait de cette implémentation, je voulais avoir un constructeur personnalisé qui fait DirectoryIndex._make(next(os.walk(input_path)))
de sorte que vous pouvez simplement passer le chemin pour lequel vous voulez une liste de fichiers. Modifications de bienvenue!
import collections
import os
DirectoryIndex = collections.namedtuple('DirectoryIndex', ['root', 'dirs', 'files'])
for file_name in DirectoryIndex(*next(os.walk('.'))).files:
file_path = os.path.join(path, file_name)
Voici comment je parcourir les fichiers en Python:
import os
path = 'the/name/of/your/path'
folder = os.fsencode(path)
filenames = []
for file in os.listdir(folder):
filename = os.fsdecode(file)
if filename.endswith( ('.jpeg', '.png', '.gif') ): # whatever file types you're using...
filenames.append(filename)
filenames.sort() # now you have the filenames and can do something with them
AUCUNE DE CES TECHNIQUES NE GARANTIT UN ORDRE 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, c'est-à-dire pour les images vidéo ou la collecte de données dépendant du temps. Assurez-vous de mettre des index dans vos noms de fichiers!