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?

305
demandé sur Alan W. Smith 2012-04-30 06:58:01

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)
451
répondu anselm 2017-06-08 02:13:56

, Vous pouvez essayer d'utiliser glob module

import glob

for filepath in glob.iglob('my_dir/*.asm'):
    print(filepath)
87
répondu Doboy 2018-10-04 10:31:34

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)
78
répondu pedromateo 2016-08-26 15:13:41

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.

8
répondu Greg 2016-08-26 14:41:27

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)
2
répondu ThorSummoner 2016-09-02 15:49:27

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!

0
répondu Daniel McGrath 2018-08-14 21:34:08