Veremos cómo leer archivos en Python para analizarlo por línea o por palabra. Mostramos un ejemplo de cómo encontrar la línea más larga de un archivo.
Éste artículo también está explicado en video. Míralo aquí: https://youtu.be/5bA0rO8yd8E
Mucha de la información disponible para el Análisis de datos está disponible en archivos de texto.
Para leer archivos de texto en Python usamos alguno de los siguientes 3 procedimientos, donde guardamos los datos en…
1. … una lista, donde cada elemento es una linea del archivo
2. … una lista, donde cada elemento es una palabra del archivo
3. … una multilista, donde cada elemento es una lista que contiene una linea del archivo y donde cada elemento de esa sublista es una palabra del archivo.
El método a utilizar dependerá de la forma en cómo queramos analizar los datos.
Veamos el primer procedimiento.
Código en Python:
print ("+++ 1 ++++") datos = [] with open("datos.txt") as fname: lineas = fname.readlines() for linea in lineas: datos.append(linea.strip('\n')) print (datos) print ("+++")
Vamos a guardar las lineas en una lista llamada datos. Abrimos el archivo con with open(“datos.txt”) as fname, donde “datos.txt” es el nombre del archivo. Ahora tenemos una variable llamada fname apuntando al contenido del archivo. Utilizamos el método readlines() para leer todas las lineas. Si aquí imprimimos la lista lineas veremos que también extrajo el carácter de salto de línea. Usando un for, recorremos toda la lista para quitar (strip) el caracter de salto de línea (‘\n’). El resultado es una lista donde cada elemento es una línea del archivo.
Código en Python:
print ("*** 2 ***") datos2 = [] with open("datos.txt") as fname: for lineas in fname: datos2.extend(lineas.split()) print ("i" , datos2) print (datos2) print ("***")
En éste caso abrimos el archivo de la misma forma como lo hicimos en el procedimiento anterior. Recorremos el objeto fname directamente con un for. Usamos lineas.split() para separar cada linea usando el caracter de espacio en blanco, por lo que obtenemos una lista donde cada elemento es una de las palabras de esa línea. Usamos el método extend para copiar todo el contenido de esa lista de palabras a otra lista llamada datos2. Al final obtenemos una lista donde cada elemento es una palabra del archivo.
Código en Python:
print ("*** 3 ***") datos3 = [] with open("datos.txt") as fname: for lineas in fname: datos3.append(lineas.split()) print (datos3) print ("***")
Éste procedimiento es muy similar al anterior, solo cambiamos el método extend por append. Son embargo, el resultado sí es bastante diferente: cada línea del archivo de texto se guarda en una lista donde cada elemento es una palabra. Entonces tenemos todo el archivo en una multilista donde cada elemento es una lista que contiene todas las palabras de una fila.
Código en Python:
def linea_mas_larga(nombre): with open(nombre) as fname: lineas = [linea.strip('\n') for linea in fname.readlines()] lmaslarga = lineas[0] for linea in lineas: if len(linea) > len(lmaslarga): lmaslarga = linea return lmaslarga print ("------") print ("La linea con mayor longitud es: ") print (linea_mas_larga("datos.txt"))
Explicación: Usamos el primero de los tres procedimientos descritos arriba. Para simplificar usamos una expresión generadora. En vez de:
for linea in lineas: datos.append(linea.strip('\n'))
usamos:
lineas = [linea.strip('\n') for linea in fname.readlines()]
El resultado será el mismo. Una vez teniendo todo en una lista, podemos recorrer la lista comparando la longitud de cada una con respecto a las demás. Comenzamos tomando la longitud de la primera línea (lmaslarga = lineas[0]). Y recorremos todas las líneas comparando si alguna es más larga. Si ése es el caso, esa será nuestra nueva línea más larga.
Queremos hacer algo similar al comando tail que devuelve las últimas n líneas de un archivo de texto.
Código en Python:
def leer_ultimas_lineas(nombre, n): with open(nombre) as fname: lineas = [lineas.strip('\n') for lineas in fname.readlines()] return lineas[-n:] print ("-----") print ("Ultimas 2 lineas del archivo: ") print (leer_ultimas_lineas("datos.txt",2))
Explicación. Leemos el archivo de texto y extraemos fila por fila copiando cada fila completa en una lista. (Mismo procedimiento usado en el ejemplo anterior). Devolvemos la lista lineas haciendo slicing, donde indicamos que solo queremos desde la fila -n (contando desde el último elemento hacia atrás), hasta el final de la lista. (El slicing en Python se explica en ésta entrada: Impresión de cadenas en Python)
Éste artículo también está explicado en video. Te lo dejo a continuación: