[Python-es] Buscar e insertar en una línea

Daπid davidmenhur en gmail.com
Jue Ago 25 19:47:27 CEST 2011


Añado: si la longitud de las columnas puede variar, ejemplo:

1 M 0.8 0.905 0.6366
2 V 0.57929 0.77 0.2279
3 S 0.40724 0.77592 0.16738
4 K 0.7477 0.5880 0.09151 7.11
5 L 0.319 0.691 0.13393 7.42
6 S 0.3374 0.5296 0.13246 7.60

en vez de comprobar la longitud de la línea deberías contar el número
de columnas, esto es:

if len(line.split(' '))==5

Parte la línea por los espacios y cuenta cuántos cachos te quedan. De
hecho, es una práctica más segura. A menos que estés *muy* segura de
que el archivo original está bien formateado y el rendimiento sea
crítico (esto es un poquito más lento), te recomiendo que uses esta.

2011/8/25 Daπid <davidmenhur en gmail.com>:
> Si el fichero no es muy grande, puedes leerlo todo con readlines
> oldata=oldfile.readlines()
> newdata=[line+' 1000.0' if len(line)<=27 else line for line in oldata]
>
> Y lo escribes a tu nuevo archivo.
>
> Ojo, estoy haciendo uso del operador ternario, si usas una versión de
> Python anterior a la 2.5 tendrás que expandir la list comprehension a
> mano (pero no es difícil).
>
> Y si el fichero es demasiado grande para cargar en memoria, usa
> readline unas cuantas veces, procesa eso, escríbelo al nuevo archivo y
> vuelve a leer.
>
> 2011/8/25 alito Z <alito81 en gmail.com>:
>> Hola a todos!
>> De nuevo con molestias.
>> Una pregunta, quizás demasiado básica, lo se, pero no soy programadora y me
>> cuesta mucho trabajo entender estas cosas. En fin, les platico.
>> Tengo una serie de datos en columna como la siguiente:
>>
>> 1 M 0.84765 0.90205 0.26366
>> 2 V 0.57929 0.77705 0.25279
>> 3 S 0.40724 0.77592 0.16738
>> 4 K 0.27477 0.65880 0.09151 7.11
>> 5 L 0.31954 0.63491 0.13393 7.42
>> 6 S 0.33374 0.57296 0.13246 7.60
>>
>>
>> Las filas siempre son del mismo tamaño.
>> Lo que quiero es agregar al final de cada columna la cantidad 1000.0, pero
>> solo en las filas que no tienen un número a partir del 27. Por supuesto, hay
>> que agregarle un espacio para que no quede el número unido a la columna
>> anterior. Y quiero que quede algo como lo siguiente:
>>
>> 1 M 0.84765 0.90205 0.26366 1000.0
>> 2 V 0.57929 0.77705 0.25279 1000.0
>> 3 S 0.40724 0.77592 0.16738 1000.0
>> 4 K 0.27477 0.65880 0.09151 7.11
>> 5 L 0.31954 0.63491 0.13393 7.42
>> 6 S 0.33374 0.57296 0.13246 7.60
>>
>> No me importaría utilizar algún comando para el shell.
>> Alguna sugerencia?
>> Gracias.
>>
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>


Más información sobre la lista de distribución Python-es