[Programación]Modificar separador de campos en Python, , como? (si es posible KISS)
Fabian Ezequiel Gallina
galli.87 en gmail.com
Vie Dic 11 16:54:43 ARST 2009
El día 11 de diciembre de 2009 15:32, Horacio Castellini
<horacio9573 en yahoo.com.ar> escribió:
> Holas... tengo un archivo de datos caca.cvs en formato CVS (incorrecto pero no se puede cambiar) donde los datos viene dados de la forma:
>
> 0," ",255
> 1," ",104
> 2," ",105
> 3," ",98
> 4," ",95
> 5," ",96
> 6," ",255
> 7," ",255
> ..............
> ............
>
> entonces mi intensión es guardar cada campo en dos listas bajo el siguiente código donde aparece el método split() ...
>
> #! /usr/bin/env python
> import sys, math
> try:
> entrada=sys.arg[1]
> except:
> print "eh! loco se usa:",sys.arg[0],"NA\n"
> sys.exit(1)
> archivo=open(entrada,"r")
> X=[]
> Y=[]
> for leer in entrada
> pares=leer.split() <--------------- Acá está el problema
> X.append(float(pares[0]))
> Y.append(float(pares[1]))
> entrada.close()
>
> Alguna idea? de como cambia el separador de espacio a ," ",?? que es lo que parece en el código de mi anterior correo en el cual emilianito no entendía... (como me dijo personalmente)
>
> si hay que apelar a expresiones regulares no hay problema, la cuestión es usar la menor cantidad posible de import modules, ya que el python del window que se correrá el código no sé que cosas tiene, salvo la estandard.
>
Si sabés que siempre va a ser de esa forma el CSV podrías usar
linea.split('," ",') y quedaría:
#! /usr/bin/env python
import sys
from decimal import Decimal
try:
entrada=sys.argv[1]
except IndexError:
print "eh! loco se usa:",sys.argv[0],"NA\n"
sys.exit(1)
archivo = open(entrada,"r")
x = []
y = []
for linea in archivo.xreadlines():
pares = linea.split('," ",')
x.append(Decimal(pares[0]))
y.append(Decimal(pares[1].replace("\n", "")))
archivo.close()
Te arreglé un par de errores sonsos (sys.arg => sys.argv) y querer
cerrar entrada cuando en realidad lo que se busca es cerrar el archivo
:).
Fijate que el último par de split, puede ser que tenga \n al final,
por eso el replace en el y.append.
También supuse que querrias usar decimal ;-)
Saludos,
--
Fabián E. Gallina
http://www.from-the-cloud.com
Más información sobre la lista de distribución Programacion