Ayuda con un programa en python

Resulta que tengo que entregar una practica de programacion. El programa es un gestor de facturas, y dos de las varias opciones son guardar las facturas introducidas en un fichero, y importar las facturas desde un fichero (el guardado).

Pues no se por qué, la función que debería importar el fichero lo hace mal :S

¿Alguien que sepa programación en python puede ayudarme?

Saludos y garcias!

PD: renmbrad la extensión del fichero adjunto a .py ya que el archivo record.py es necesario para que se pueda ejecutar el programa

EDIT: he puesto en negrita las partes "interesantes", por si alguien puede ayudarme y no le apetece leerse todo el programa ^^

from record import record
class Fecha(record):
  dia=0
  mes=0
  anyo=0
 
class Factura(record):
  num_factura=0
  concepto=''
  cliente=''
  importe=0
  fecha=Fecha()
  pagado=''
#esta funcion pregunta la fecha al usuario al introducir la factura
def lee_fecha(fecha):
  fecha.dia=int(raw_input('Dia: '))
  fecha.mes=int(raw_input('Mes: '))
  fecha.anyo=int(raw_input('Anyo: '))
#y esta la muestra
def muestra_fecha(fecha):
  return '%d/%d/%d'%(fecha.dia,fecha.mes,fecha.anyo)

#esta funcion es la que sirve para introducir una factura nueva
def lee_factura(factura):
  factura.num_factura=int(raw_input('Numero de factura: '))
  factura.concepto=raw_input('Concepto: ')
  factura.cliente=raw_input('Cliente: ')
  factura.importe=int(raw_input('Importe: '))
  factura.fecha=Fecha()
  lee_fecha(factura.fecha)
  factura.pagado=raw_input('Pagado [si/no]: ')
#esta funcion es la que muestra una factura en concreto
def muestra_factura(factura):
  print 'Numero de factura:',factura.num_factura
  print 'Concepto: ',factura.concepto
  print 'Cliente: ',factura.cliente
  print 'Importe: ',factura.importe
  print 'Fecha: ',muestra_fecha(factura.fecha)
  print 'Pagado: ',factura.pagado

def lee_lista_factura():
  opcion='si'
  lista=[]
  while opcion.lower()=='si':
    factura=Factura()
    lee_factura(factura)
    lista.append(factura)
    opcion=raw_input('Desea intoducir una nueva factura [si/no]: ')
  return lista

def muestra_lista(lista):
  for factura in lista:
    muestra_factura(factura)
    print '*****'*6
   
def compara_fechas(fecha1,fecha2):
  if fecha1.anyo>fecha2.anyo:
    return 1
  elif fecha1.anyo<fecha2.anyo:
    return -1
  elif fecha1.mes>fecha2.mes:
      return 1
  elif fecha1.mes<fecha2.mes:
    return -1
  elif fecha1.dia>fecha2.dia:
    return 1
  elif fecha1.dia<fecha2.dia:
    return -1
  else: return 0
 
def selecciona_facturas(lista,fecha):
  anteriores=[]
  for factura in lista:
    if compara_fechas(factura.fecha,fecha)==-1:
      anteriores.append(factura)   
  return anteriores

def importe_total(lista):
  importe=0
  for factura in lista:
    importe+=factura.importe
  print '- La suma de todos los importes no pagados es de %d euros'%(importe)

#esta funcion selecciona facturas no pagadas pero no superiores a un tiempo de un anyo
def factura_no_pagada(factura, fecha):
  if factura.pagado.lower() !='si':
    if ((fecha.anyo)-(factura.fecha.anyo))>1:
      return 0
    if ((fecha.anyo)-(factura.fecha.anyo))==0:
      return 1
    elif ((fecha.anyo)-(factura.fecha.anyo))==1:
      if ((fecha.mes)-(factura.fecha.mes))>=1:
        return 0
      elif ((fecha.mes)-(factura.fecha.mes))<0:
        return 1
      elif ((fecha.mes)-(factura.fecha.mes))==0:
        if ((fecha.dia)-(factura.fecha.dia))<0:
          return 1
        elif ((fecha.dia)-(factura.fecha.dia))>=0:
          return 0

#esta funcion muestra las facturas no pagadas desde hace 1 anyo
def factura_vencida(factura, fecha):
  if factura.pagado.lower()!='si':
    if ((fecha.anyo)-(factura.fecha.anyo))>1:
      return 1
    elif ((fecha.anyo)-(factura.fecha.anyo))<=0:
      return 0
    elif ((fecha.anyo)-(factura.fecha.anyo))==1:
      if ((fecha.mes)-(factura.fecha.mes))>=1:
        return 1
      elif ((fecha.mes)-(factura.fecha.mes))<=0:
        if ((fecha.dia)-(factura.fecha.dia))>=0:
          return 1
        elif ((fecha.dia)-(factura.fecha.dia))<0:
          return 0

     
[b]#esta funcion importa una lista
def carga_fichero():
   
    fichero=raw_input('Nombre del fichero de entrada de datos: ')
    fe=open(fichero,'r')
    factura=Factura()
    linea=fe.readline()
    while linea!='':
      factura.num_factura=int(linea[:-1])
      print factura.num_factura
      linea=fe.readline()
      factura.concepto=linea[:-1]
      print factura.concepto
      linea=fe.readline()     
      factura.cliente=linea[:-1]
      print factura.cliente
      linea=fe.readline()
      factura.importe=int(linea[:-1])
      print factura.importe
      linea=fe.readline()
      linea=linea[:-1]
      lista2=linea.split()
      print lista2
      factura.fecha.dia=int(lista2[0])
      factura.fecha.mes=int(lista2[1])
      factura.fecha.anyo=int(lista2[2])
      linea=fe.readline()
      factura.pagado=linea[:-1]
      print factura.pagado
      if factura_vencida(factura, fechanueva):
        lista.append(factura)
      linea=fe.readline()
    fe.close

     
[/b]
#esta funcion es la que muestra el menu
def menu():
 

  while 1:#asi creamos un bucle infinito
    print '--------------ELIGE UNA OPCION--------------'
    print '\n'
    print '1) Anyadir una factura a la lista'
    print '2) Mostrar todas las facturas con fecha de emision anterior a la fecha introducida'
    print '3) Mostrar el importe total de las facturas no pagadas hasta la fecha'
    print '4) Guardar lista de facturas a un fichero'
    print '5) Importar lista de facturas desde un fichero'
    print '6) Mostrar el importe total de las facturas vencidas'
    print '7) Salir'
    print '\n'
   
    print('\n')
    opcion=int(raw_input('¿Que deseas hacer? '))
    print('\n')


    #aqui empieza la opcion 1- anyadir factura
    if opcion==1:
      print('-Anyade una factura a la lista')
      factura=Factura()
      lee_factura(factura)
      lista.append(factura)
     


    #aqui empieza la opcion 2-mostrar facturas anteriores a la fecha actual
    elif opcion==2:
      print '...lista de facturas anteriores a ',muestra_fecha(fechanueva)
      muestra_lista(selecciona_facturas(lista,fechanueva))
      importe_total(lista)
       
    #aqui empieza la opcion 3-mostrar facturas no pagadas
    elif opcion==3:
      nopagados=[]
      for f in selecciona_facturas(lista,fechanueva):
        if factura_no_pagada(f, fechanueva):
          nopagados.append(f)
      muestra_lista(nopagados)
      importe_total(nopagados)
     



[b]    #aqui empieza la opcion 4- guardar facturas en un fichero
    elif opcion==4:   
      fichero=raw_input('Nombre del fichero de salida de datos: ')
      fs=open(fichero,'w')
      for factura in lista:
        fs.write('%d\n'%(factura.num_factura))
        fs.write('%s\n'%(factura.concepto))
        fs.write('%s\n'%(factura.cliente))
        fs.write('%d\n'%(factura.importe))
        fs.write('%d '%(factura.fecha.dia))
        fs.write('%d '%(factura.fecha.mes))
        fs.write('%s\n'%(factura.fecha.anyo))
        fs.write('%s\n'%(factura.pagado))
      fs.close
     
[/b]


    #aqui empieza la opcion 5- importar facturas desde un fichero
    elif opcion==5:
      carga_fichero()
         



    #opcion 6-mostrar facturas vencidas
    elif opcion==6:
      vencidas=[]
      for factura in lista:
        if factura_vencida(factura, fechanueva):
          vencidas.append(factura)
      muestra_lista(vencidas)
      importe_total(vencidas)
     


    #opcion 7, salir del programa
    elif opcion==7:
      print 'Gracias por usar este programa.'
      break


print('-Por favor, antes de utilizar el programa introduce la fecha de hoy')
fechanueva=Fecha()
lee_fecha(fechanueva)
fechaintroducida=True
print 'La fecha introducida es: ',muestra_fecha(fechanueva)
lista=[]
print '\n------Bienvenido al gestor de facturas------'
menu()

Adjuntos

0 respuestas