Autor Tema: Correr tan solo una parte de una cadena.  (Leído 4965 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Correr tan solo una parte de una cadena.
« en: 29 de Noviembre de 2021, 12:03:59 »
Hola gente ¿ como están ? Feliz lunes para todos.-
El tema de hoy parece sencillo pero lo necesito y por mas que consulto en google no encuentro la solución.-

Asi lo tengo en el archivo de texto:
00001, Tomate Arcor lata x 400 grs. , 101.50
00002, Extracto de tomate Molto , 79.50
00003, Mayonesa Helmmans DP x 250 grs. , 89.50

Necesito mostrarlo de esta manera:
00001  Tomate Arcor lata x 400 grs.              $     101.50
00002  Extracto de tomate Molto                   $      79.50
00003  Mayonesa Helmmans DP x 250 grs.    $      89.50

Hice unas pruebas con cadena f-string y no me salió.-
Desde ya gracias. Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Correr tan solo una parte de una cadena.
« Respuesta #1 en: 29 de Noviembre de 2021, 13:36:47 »
Hola Daniel, vas poniendo las cosas más difíciles.

A ver si esto te vale.

Código: Python
  1. import re
  2.  
  3. texto = """00001, Tomate Arcor lata x 400 grs. , 101.50
  4. 00002, Extracto de tomate Molto , 79.50
  5. 00003, Mayonesa Helmmans DP x 250 grs. , 89.50"""
  6.  
  7. lineas = re.split('\n', texto)
  8. lineas = [re.split(' ?, ?', linea) for linea in lineas]
  9.  
  10. for linea in lineas:
  11.     print(f'{linea[0]:5s} {linea[1]:32s} $ {linea[2]:>8s} ')


Salida:
Código: [Seleccionar]
00001 Tomate Arcor lata x 400 grs.     $   101.50
00002 Extracto de tomate Molto         $    79.50
00003 Mayonesa Helmmans DP x 250 grs.  $    89.50
« Última modificación: 29 de Noviembre de 2021, 13:39:46 por Picuino »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re:Correr tan solo una parte de una cadena.
« Respuesta #2 en: 29 de Noviembre de 2021, 15:23:38 »
Hola Daniel, vas poniendo las cosas más difíciles.

A ver si esto te vale.

Código: Python
  1. import re
  2.  
  3. texto = """00001, Tomate Arcor lata x 400 grs. , 101.50
  4. 00002, Extracto de tomate Molto , 79.50
  5. 00003, Mayonesa Helmmans DP x 250 grs. , 89.50"""
  6.  
  7. lineas = re.split('\n', texto)
  8. lineas = [re.split(' ?, ?', linea) for linea in lineas]
  9.  
  10. for linea in lineas:
  11.     print(f'{linea[0]:5s} {linea[1]:32s} $ {linea[2]:>8s} ')


Salida:
Código: [Seleccionar]
00001 Tomate Arcor lata x 400 grs.     $   101.50
00002 Extracto de tomate Molto         $    79.50
00003 Mayonesa Helmmans DP x 250 grs.  $    89.50
:-/ :-/ :-/

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Correr tan solo una parte de una cadena.
« Respuesta #3 en: 29 de Noviembre de 2021, 16:48:47 »
Hola Picuino, gracia x el código.
Tengo un inconveniente, me da un error y no encuentro como solucionarlo,
debí decirte que tomo el texto línea a línea siempre que haya un coincidencia.-

Código: Python
  1. # BUSQUEDA de productos.
  2. def buscar():
  3.     print("\n  Buscar: campo código, campo descripción o campo precio:")
  4.     buscar = input("\n  Ingrese busqueda...: ")
  5.    
  6.     with codecs.open('productos.txt', 'r', encoding='utf-8') as archivo:
  7.         for linea in archivo:
  8.             if re.search(buscar, linea, re.IGNORECASE):    
  9.                 linea = " ", linea.strip()
  10.                 linea = re.split(' ?, ?', linea)
  11.                 print(f'{linea[0]:5s} {linea[1]:32s} $ {linea[2]:>8s} ')
  12.  
  13.     input("\n Pulse una tecla para continuar...")
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Correr tan solo una parte de una cadena.
« Respuesta #4 en: 29 de Noviembre de 2021, 16:59:05 »
Prueba quitando la línea 9:
linea = " ", linea.strip()

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Correr tan solo una parte de una cadena.
« Respuesta #5 en: 29 de Noviembre de 2021, 18:00:59 »
Hola Picuino, gracia.
Por lo que veo el separador de la coma es opcional (?) ¿Qué pasa si no lo encuentra?
Lo quite y me da error.
Slds. Daniel.

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Correr tan solo una parte de una cadena.
« Respuesta #6 en: 30 de Noviembre de 2021, 04:53:11 »
La instrucción re.split(' ?, ?', linea)   divide la línea donde haya una coma. Además, si encuentra un espacio alrededor de la coma, lo elimina (es como hacer un strip())

Un saludo.