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.

¿Se están creando objetos a partir de un archivo de texto con tipos de atributos incorrectos?

Tengo un archivo de texto que está formateado (P001, Part001, 10.0, 100 O AP002, AssembledPart2, 130, 1, P002, P004), que se está leyendo línea por línea, y cada línea se está creando como un objeto. Todo parece estar funcionando bien, pero todos los atributos se están estableciendo como str, y necesito que algunos de ellos sean float o int. No puedo entender por qué está sucediendo esto.

def readParts(self, file):
    '''Lee el archivo parts.txt y lo ejecuta línea por línea a través de part.__init__ y lo agrega a la lista de partes'''
    id = None
    name = None
    price = 0.0
    onhandqty = int
    componentID1 = None
    componentID2 = None
    with open(os.path.join(sys.path[0], "parts.txt"), "r") as file:
        for line in file:
            row = line.split(",")
            if len(row) == 4:
                id, name, price, onhandqty = [i.strip() for i in row]
                part = Part(id, name, price, onhandqty)
                WarehouseManager.parts.append(part)
            if len(row) == 6:
                id, name, price, onhandqty, componentID1, componentID2 = [i.strip() for i in row]
                assembledpart = AssembledPart(id, name, price, onhandqty, componentID1, componentID2)
                WarehouseManager.parts.append(assembledpart)

Para referencia, la clase “init”

class Part():

    id = None

    name = None

    price = 0.0

    onhandqty = int



    def __init__(self, id, name, price, onhandqty):
        self.id = id
        self.name = name
        self.price = price
        self.onhandqty = onhandqty
class AssembledPart(Part):

    componentID1 = None

    componentID2 = None



    def __init__(self, id, name, price, onhandqty, componentID1, componentID2):
        super().__init__(id, name, price, onhandqty)
        self.componentID1 = componentID1
        self.componentID2 = componentID2

¿Alguien puede señalar dónde me estoy equivocando?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema probablemente está en esta línea:

    id, name, price, onhandqty = [i.strip() for i in row]
    

    Esto asigna todos los valores a variables de tipo cadena. Para asignar correctamente los valores como números decimales o enteros, debes convertirlos explícitamente:

    id, name, price, onhandqty = [i.strip() for i in row]
    price = float(price)
    onhandqty = int(onhandqty)
    

    Necesitarás hacer la misma conversión para AssembledPart también.

    id, name, price, onhandqty, componentID1, componentID2 = [i.strip() for i in row]
    price = float(price)
    onhandqty = int(onhandqty)
    

    Esto debería resolver tu problema con los atributos que se establecen como cadenas.

Comments are closed.