nuevo "programando"
Arnau Sanchez
arnau en ehas.org
Jue Jul 12 15:21:33 CEST 2007
hmanzano en labein.es escribió:
> Hola a todos, soy nuevo en esto de la programación, o más bien hacer
> pequeños scripts, estoy aprendiendo y me han recomendado python por ser un
> lenguaje claro y sencillo. Mi problema es que para alguna cosa tengo
> prisa. Explico lo que quiero hacer:
>
> Tengo un archivo x de unas 2000 lineas, de las cuales me interesan 300.
> Empiezan por la palabra " frecuencia" con espacios. Lo que quiero
> hacer es que me escriba esas lineas en otro archivo de salida, digamos y.
> Con l comando
Esta es una duda bastante típica, así que tenía su entrada en el FAQ que
acabamos de crear. Aprovechando tu pregunta, la he completado con el problema
que planteas:
http://pythonesfaq.k-rolus.net/#index21h3
La solución que usa expresiones regulares no me acaba de gustar, seguro que a
alguien se le ocurre alguna forma mejor.
1ª propuesta: usando métodos de cadena.
output = file("salida.txt", "w")
for line in file("entrada.txt"):
if line.lstrip().startswith("frecuencia"):
output.write(line)
output.close()
2ª propuesta: usando métodos de cadena y el método *writelines* con generadores.
output = file("salida.txt", "w")
condition = lambda s: s.lstrip().startswith("frecuencia")
output.writelines(line for line in file("entrada.txt") if condition(line))
output.close()
3ª propuesta: usando métodos de cadena, y leyendo/escribiendo en una misma línea
con generadores (poco claro).
condition = lambda s: s.lstrip().startswith("frecuencia")
file("salida.txt", "w").writelines(line for line in file("entrada.txt") if
condition(line))
4ª propuesta: usando expresiones regulares. En este caso tan simple no está
justificado, pero a veces la búsqueda puede ser más compleja y entonces sí puede
ser útil.
import re
output = file("salida.txt", "w")
pat = re.compile("^(\s*frecuencia.*)$", re.MULTILINE)
addlf = lambda iterator: ("%s\n"%s for s in iterator)
output.writelines(addlf(pat.findall(file("entrada.txt").read())))
output.close()
Más información sobre la lista de distribución Python-es