Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Ayuda con una aplicación Python que genera informes

20 de noviembre de 2014

Buenos días amigos, soy totalmente nuevo en Python y quiero hacer un programa que me genere informes basados en cálculos que debe hacer el programa. Ese no es el problema; el problema es que hice un módulo que contiene una función que solo lee un archivo de texto.csv y me devuelve los datos que contiene la lista de la referencia que estoy buscando.

El problema radica en que cuando lo voy a importar desde otros módulos no funciona como funciona en el módulo en donde esta dicha función, lo cual se me hace muy raro debido a que si funciona en ese modulo debería funcionar igual en cualquier modulo que lo importe.

Mi carpeta de trabajo en resumen esta así:

FUNCION (paquete)
    __init__.py
    FUNCION1.PY (en donde está la función que necesito)
PRONOSTICO (paquete)
    __init__.py
    PRONOSTICO1.PY (en donde necesito que funcione la función)

Esta es la función que está dentro de FUNCION1.PY:

import csv
 
def accion(referencia):
    consolidado_csv = csv.reader(open('consolidado.csv','r') )
    for k,line in enumerate(consolidado_csv):
        if line[0] == referencia:
            return k,line[0]

Y así lo importo desde PRONOSTICO1.PY:

from funcion import funcion1
 
a = funcion1.accion('AROME008NAL')
print(a)

Cuando ejecuta la función me devuelve none, como si no encontrara la referencia que busco, pero cuando pruebo la función en el modulo, sí la encuentra.

De verdad agradecería cualquier ayuda que me puedan brindar.


Respuestas

#1

Lo primero que te aconsejo es que no uses los nombres de las funciones y módulos todo en mayúsculas:

funcion
    __init__.py
    funcion1.py
pronostico
    __init__.py
    pronostico1.py

Lo segundo es que trates de importar el módulo tal y como se suele hacer en Python:

import funcion.funcion1
 
a = funcion1.accion('AROME008NAL')
print(a)

Por último, otro pequeño consejo es que no utilices nombres tan genéricos para llamar a tus paquetes, módulos y acciones, ya que a la larga te puede complicar el mantenimiento de la aplicación.

@javiereguiluz

20 noviembre 2014, 8:38