0
votes

Puis-je faire boucle via des répertoires et des sous-répertoires et de stocker certains fichiers dans un tableau?

J'ai un dossier contenant de nombreux sous-dossiers et des images au sein de ces sous-dossiers. J'ai un code qui boucle à travers les dossiers et les sous-dossiers et imprime le nom de chaque image une à la fois. Je veux que tous ces noms d'image soient stockés dans un seul tableau. Comment puis-je obtenir ma boucle pour ajouter chaque nom d'image sur le même tableau?

Je n'ai vu que des solutions similaires sur Linux ou Matlab jusqu'à présent, mais pas sur Python. P>

files = []
#r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for face_image in f :
        if face_image.endswith("g"): #to get all '.jpg' and all '.png' files
            print(face_image)


0 commentaires

4 Réponses :


1
votes

Après votre instruction d'impression, vous pouvez utiliser fichiers.append (fas_image) pour ajouter l'image de visage à votre liste. Lorsque les boucles sont terminées, tous les noms d'image valides figureront dans la liste à utiliser.


2 commentaires

Merci pour la suggestion! Lorsque je suis imprimée (visage_image) dans la boucle, la sortie que je veux est produite. Lorsque je quitte la boucle et que je suis imprimée (Face_Image), seul le dernier fichier est produit. La même chose qu'avant


@charlotte do impression (fichiers) à la place. La variable fichiers est ce qui maintient réellement la liste; Face_Image ne tiendra jamais un nom à la fois.



0
votes

Je n'étais pas sûr que c'était une question légitime ou non. Vous devez ajouter les fichiers à la liste. xxx


0 commentaires

0
votes

Vous pouvez essayer quelque chose comme ceci: xxx

ou un peu plus compact: xxx


3 commentaires

Cela n'a pas aimé la dernière ligne de code malheureusement. "AttributeError: l'objet" générateur "n'a pas d'attribut 'Endswith'" "


Vous avez probablement une faute de frappe, le fichier n'est pas un générateur, mais un élément étant itéré sur (deuxième extrait) et même commentaire pour F dans le premier extrait. Je vérifierais que vous alliez correspondre à la mine exactement. Les deux extraits de code travaillent sur ma boîte.


J'ai changé fichiers = [F pour F dans les fichiers si f.endsswith ('g')] à fichiers = [FF pour FF dans les fichiers si ff.endswith ('g')] < / code> être plus clair.



2
votes

Utilisation du pathlib et un motif global récursif:

from pathlib import Path

file_types = ("jpg", "png")
file_paths = []
for file_type in file_types:
    file_paths.extend(Path(".").glob(f"**/*.{file_type}"))

file_names = [file_path.name for file_path in file_paths]


0 commentaires