Foros del Web » Programando para Internet » Python »

Campo que contiene 2 tipos de datos

Estas en el tema de Campo que contiene 2 tipos de datos en el foro de Python en Foros del Web. Hola tengo un archivo de excel que tengo que cargar a mi B.D. lo cual ya lo hace pero tengo problema con un campo que ...
  #1 (permalink)  
Antiguo 15/08/2014, 10:08
 
Fecha de Ingreso: julio-2011
Ubicación: Peru
Mensajes: 92
Antigüedad: 12 años, 8 meses
Puntos: 1
Campo que contiene 2 tipos de datos

Hola tengo un archivo de excel que tengo que cargar a mi B.D. lo cual ya lo hace pero tengo problema con un campo que con tiene 2 tipos de datos

Models.py

Código Python:
Ver original
  1. class Product(models.Model):
  2.  
  3.     Id_DataExcel = models.ForeignKey(DataExcel)
  4.     CodSucursal = models.CharField(max_length=60)
  5.     Sucursal = models.CharField(max_length=60)
  6.     CodDivision = models.CharField(max_length=200)
  7.     Division = models.CharField(max_length=300)
  8.     CodArea = models.CharField(max_length=60)
  9.     Area = models.CharField(max_length=13)
  10.     CodDpto = models.CharField(max_length=60)
  11.     Dpto = models.CharField(max_length=35)
  12.     CodLinea = models.CharField(max_length=200)
  13.     Linea = models.CharField(max_length=35)
  14.     CodSubLinea = models.CharField(max_length=200)
  15.     SubLinea = models.CharField(max_length=200)
  16.     CodModelo = models.CharField(max_length=60)
  17.     Modelo = models.CharField(max_length=50)
  18.     CodVariacion = models.CharField(max_length=60)
  19.     Variacion = models.CharField(max_length=50)
  20.     CodMarca = models.CharField(max_length=200)
  21.     Marca = models.CharField(max_length=60)
  22.     CodProveedor = models.CharField(max_length=200)
  23.     Proveedor = models.CharField(max_length=60)
  24.     Temporada = models.CharField(max_length=60)
  25.     Procedencia = models.CharField(max_length=60)
  26.     TipoNeg = models.CharField(max_length=15)
  27.     Color = models.CharField(max_length=200)
  28.     Talla = models.CharField(max_length=200)
  29.     SemAntig = models.CharField(max_length=200)
  30.     ConVenta = models.CharField(max_length=200)
  31.     ConStockOH = models.CharField(max_length=200)
  32.     EsRebate = models.CharField(max_length=200)
  33.     ConCobertura = models.CharField(max_length=200)
  34.     VtaUnd = models.CharField(max_length=200)
  35.     VtaSMF = models.FloatField()
  36.     Contr = models.FloatField()
  37.     Costo = models.FloatField()
  38.     Stock_OH = models.CharField(max_length=200)
  39.     Costo_OH = models.FloatField()
  40.     Cbt = models.CharField(max_length=200)




views.py
Código Python:
Ver original
  1. class DataExcelProcessView(TemplateView):
  2.     template_name = 'app/dataexcel_process.html'
  3.  
  4.     def get(self, request, *args, **kwargs):
  5.         return super(DataExcelProcessView, self).get(request, args, kwargs)
  6.  
  7.     def get_context_data(self, **kwargs):
  8.         ctx = super(DataExcelProcessView, self).get_context_data(**kwargs)
  9.         ctx['process'] = self.process_file()
  10.         return ctx
  11.  
  12.     def process_file(self):
  13.         object = get_object_or_404(DataExcel, pk=self.kwargs['pk'])
  14.         book = xlrd.open_workbook(object.file.path)
  15.         hoja1 = book.sheet_by_index(0)
  16.         fields = ('CodSucursal', 'Sucursal', 'CodDivision', 'Division', 'CodArea', 'Area', 'CodDpto', 'Dpto', 'CodLinea',  'Linea', 'CodSubLinea', 'SubLinea', 'CodModelo', 'Modelo', 'CodVariacion', 'Variacion', 'CodMarca', 'Marca', 'CodProveedor', 'Proveedor', 'Temporada', 'Procedencia', 'TipoNeg', 'Color', 'Talla',  'SemAntig', 'ConVenta', 'ConStockOH', 'EsRebate', 'ConCobertura', 'VtaUnd', 'VtaSMF', 'Contr', 'Costo', 'Stock_OH', 'Costo_OH', 'Cbt')
  17.  
  18.         products = [Product(Id_DataExcel=DataExcel.objects.get(pk=object.id),**{fields[i]: cell for i, cell in enumerate(hoja1.row_values(rowid))})  # recorrido para guardar la data
  19.                     for rowid in range(1, hoja1.nrows)]
  20.  
  21.        #=====codigo para parsear los datos=====
  22.         for product in products:
  23.             product.CodSucursal = str(int(product.CodSucursal))
  24.             product.CodLinea = str(int(product.CodLinea))
  25.             product.CodModelo = str(int(product.CodModelo))
  26.             product.CodVariacion = str(int(product.CodVariacion))
  27.             product.CodMarca = str(int(product.CodMarca))
  28.             product.CodProveedor = str(int(product.CodProveedor))
  29.  
  30.        #========================================
  31.         try:
  32.             Product.objects.bulk_create(products)
  33.  
  34.         except IntegrityError as e:
  35.             return False

Pero tengo problemas con el campo "Color" ese campo en el archivo de excel contiene 2 tipos de datos

archivo de excel :

Código:
CodSucursal	 Sucursal    .........   ........  .........  ........     Color
     20023	Primavera     .........   ........   ........  ........    ROS1
     20023	Primavera     .........   ........   ........  ........    BLA
     20023	Primavera     .........   ........   ........  ........    36951
     20023	Primavera     .........   ........   ........  ........    ROJ1
Data subida a mi B.D.

Código:
CodSucursal	 Sucursal    .........   ........  .........  ........     Color
     20023	Primavera     .........   ........   ........  ........    ROS1
     20023	Primavera     .........   ........   ........  ........    BLA
     20023	Primavera     .........   ........   ........  ........    36951.0
     20023	Primavera     .........   ........   ........  ........    ROJ1
no se como transformar el campo "Color" ese campo tiene 2 tipos de datos
cuando es ROS1 no hay problema ,el problema esta cuando es 36951 le aumenta el .0 decimal

alguien que me ayude por favor
  #2 (permalink)  
Antiguo 15/08/2014, 13:34
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Campo que contiene 2 tipos de datos

La razón de porque pasa esto es porque excel guarda ese dato como un numero en esa celda. Lo único que tienes que hacer es checar si ese dato es un float y si es así, convertirlo a entero y luego a cadena.

Etiquetas: campo, gui, ip
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:00.