domingo, 21 de marzo de 2010

No está diseñado para ésto...

Aparentemente Blogspot no es de mucha utilidad para poner código en los posts. Tendré hacer ésto en otro sitio, ni modo.

[Python] Funciones para cadenas

He aquí algunas funciones para trabajar con cadenas en Python. Tal vez esté reinventando algunas funciones que ya están presentes en la inmensa librería estándar, pero fué entretenido hacerlas a mano de todos modos.

Una de las cosas para las que eché en falta una función sencilla fué para revisar si una o varias subcadenas están presentes dentro de otra. La función recibe una lista de subcadenas y la cadena donde tendremos que buscarlas, aparte de un booleano por si queremos que la búsqueda tenga en cuenta las mayúsculas o no:

def string_search(terms, string, scase = False):
count = 0
for t in terms:
if scase == False and string.lower().find(t.lower()) != -1:
count += 1
else:
if scase == False and string.find(t) != -1:
count += 1
if count == len(terms):
return True
else:
return False


Probablemente no esté escrita de la manera más pitónica posible (se ve algo... rústica...) pero aparentemente trabaja bien. Por ejemplo:


print string_search(['hola', 'mundo'], "Hola Mundo")


Ello resulta en 'True', porque consiguió las dos cadenas que se pidió buscar. Y si luego de "Hola Mundo" cambiamos el valor de scase a True:



print string_search(['hola', 'mundo'], "Hola Mundo", scase = True)



Ahora nos resulta 'False', porque se habilitó la sensibilidad a diferencias entre mayúsculas y minúsculas.

Ahora, a obtener los primeros y últimos caracteres de una cadena. La sintaxis normal es bastante corta y concisa, por lo que obtener lo que llaman "slices" no es un trabajo del otro mundo. Ahora, si tienes una memoria tan propensa a olvidar pequeños detalles como la mía, tal vez prefieras meter ese proceso en dos funciones independientes.


def lastchars(n, string):
return string[-n:]



def firstchars(n, string):
return string[0:n]

De este modo, sólo tenemos que pasar el número de caracteres y la cadena. Más sencillo imposible. En cierto modo, me alegra que Python no tenga unas funciones así por defecto, sino que sólo ofrezca el sistema de slices, que se adapta perfectamente para construir éste tipo de funciones propias si sabes usarlo. Y eso se presta para hacer cosas mucho más complejas que éstas, que son sólo un uso elemental.

[Python] Archivo de texto a lista

Cómo leer un archivo de texto y guardarlo línea por línea en una lista. En Python se puede hacer con una sóla línea de código:

lines = open('respaldo.txt', 'r').read().split('\n')