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)
4 Réponses :
Après votre instruction d'impression, vous pouvez utiliser fichiers.append (fas_image) code> 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. P>
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) code> à la place. La variable
fichiers code> est ce qui maintient réellement la liste;
Face_Image Code> ne tiendra jamais un nom à la fois.
Je n'étais pas sûr que c'était une question légitime ou non. Vous devez ajouter les fichiers à la liste.
Vous pouvez essayer quelque chose comme ceci: ou un peu plus compact: p>
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')] code> à
fichiers = [FF pour FF dans les fichiers si ff.endswith ('g')] < / code> être plus clair.
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]