Autor Tema: Correr tan solo una parte de una cadena.  (Leído 4968 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.


 

anything