es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtuve un error de StopIteration, ¿cómo solucionar este error?

Estoy almacenando los nombres de cada imagen en el arreglo “filename” y las etiquetas asociadas a esa imagen en el arreglo “labels”. Así que escribí este código:

import numpy as np

subdirs, dirs, files = os.walk('/content/all_images').__next__()
m = len(files)
print(m)

filenames = []
labels = np.zeros((m, 1))

import os
import shutil

imagesdir = '/content/all_images'
filenamescounter = 0
labelscounter = -1

for subdir, dirs, files in os.walk(traindir):
    #print(files)
    for file in files:
        filenames.append(file)
        labels[filenamescounter, 0] = labelscounter
        filenamescounter = filenamescounter + 1
    labelscounter = labelscounter + 1

print(len(filenames))
print(labels.shape)

pero obtuve un error.

Traceback (most recent call last):

  File "<ipython-input-4-4f63fd378da3>", line 3, in <module>
    subdirs, dirs, files = os.walk('/content/all_images').__next__()

StopIteration

¿Cómo solucionar este error?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error StopIteration ocurre cuando el iterador no tiene más elementos. Esto significa que el código ha intentado extraer un elemento de un objeto iterable vacío.

    En tu caso, el error ocurre porque el método os.walk() devuelve un objeto iterador que solo se puede iterar una vez. Después de la primera iteración, el iterador se agota y no hay más subdirectorios para explorar.

    Para solucionar este error, puedes utilizar la función list() para crear una lista de todos los subdirectorios y archivos en el directorio. Aquí está el código actualizado:

    import numpy as np
    import os
    
    images_dir = '/content/all_images'
    filenames = []
    labels = []
    
    for subdir, dirs, files in os.walk(images_dir):
        for file in files:
            filenames.append(file)
            labels.append(subdir.split('/')[-1])
    
    labels = np.array(labels)
    
    print(len(filenames))
    print(labels.shape)
    

    En este código actualizado, primero creamos listas vacías para filenames y labels. Luego iteramos sobre todos los subdirectorios y archivos utilizando os.walk(). Para cada archivo, agregamos el nombre de archivo a la lista filenames y el nombre del directorio padre (que representa la etiqueta de clase) a la lista labels. Finalmente, convertimos la lista labels en un array numpy.

    Ten en cuenta que no necesitamos conocer el número total de archivos (m) de antemano, ya que estamos utilizando listas en lugar de arrays numpy para almacenar los nombres de archivos y las etiquetas.

Comments are closed.