nuevo "programando"
Arnau Sanchez
arnau en ehas.org
Jue Jul 12 15:35:01 CEST 2007
Arnau Sanchez escribió:
>> 300. Empiezan por la palabra " frecuencia" con espacios. Lo que
Por aclarar: lo que acabo de mandar no tienen en cuenta el número de espacios o
tabuladores que preceden a la palabra "frecuencia" en inicio de línea. Si
realmente quieres que empiece por 5 espacios, ni más ni menos, cambiarías:
line.lstrip().startswith("frecuencia")
por
line.startswith(" frecuencia")
o
line.startswith(" "*5+"frecuencia")
o
line.find("frecuencia") == 5
y
"^(\s*frecuencia.*)$"
por
"^( frecuencia.*)$"
o
"^( {5}frecuencia.*)$"
> 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()
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
>
Más información sobre la lista de distribución Python-es