Tutorial de Python – Entrega 3
Comenzamos esta capítulo agradeciendo a todos los perfiles de Twitter que han querido sumarse a la iniciativa de pertenecer a este tutorial, para que se puedan explicar los objetos que veremos en este tema de una forma completamente distinta a “lo típico”. He creado un enlace de agradecimiento, en el siguiente hilo: https://twitter.com/Kirzahk/status/1332668012160225280?s=20, donde aparecen las 82 cuentas que en el momento de realización del tutorial se han ofrecido.
Se ha creado un archivo en el servidor donde se encuentra publicado este tutorial, en la ruta de https://www.tecnologiaciber.com/tuiteros.txt. Lo más sencillo para obtenerlo es hacer clic en el enlace y se abrirá en una nueva ventana/pestaña el archivo, lo guardamos como “tuiteros.txt” en alguna parte de nuestro disco duro y avanzamos hasta el paso “Carga desde archivo de texto” de este tutorial, donde lo cargaremos en memoria desde el fichero dado.
Pero será utópico no hacer empleo de las capacidades de Python para tener automáticamente este archivo desde código, aunque sea meterme en el berenjenal padre, adelantando conocimientos que veremos después. Vamos al lío.
La técnica que vamos a emplear a continuación se llama “webscrapping”, de una forma muy muy básica (se ruega emplear con talento) y claramente preparada para este ejemplo. Nuestra misión es adquirir el archivo que está en el blog y almacenarlo en un archivo de texto.
Creamos un nuevo archivo de Python, lo llamamos “descargador.py”
Es muy posible, si estáis haciendo este tutorial desde cero, que debéis instalar un componente que necesitamos, desde el terminal de Visual Studio Code, mediante la instrucción:
requests es un módulo que nos va a permitir acceder a este contenido que tenemos en la web.
Una vez que pip lo instale (puede, como suelo decir, “chirriar” algo que diga que no está actualizado, cosa que ahora mismo no es importante hacerlo), ya lo tendremos disponible para ser empleado en nuestro código.
Como siempre, recomiendo hacerle un “print(dir(requests))” para que conozcamos los distintos métodos y funciones que incorpora, y echarles un vistazo por si alguna llama más la atención que otras.
Buff, como si leyéramos chino. Comencemos con el código fuente. Lo iremos explicando línea a linea y luego se muestra como un todo.
Aunque el archivo que está subido a la web es texto, se descarga como archivo binario, por lo que debemos grabarlo como tal para poder accederse como texto (parece una perogrullada, cosas de la informática, jaja)
El código fuente sin comentarios, tal y como os indicaba antes:
Ahora, tras ejecutarlo, justo donde tengamos el código fuente de «descargador.py», debemos tener el archivo de texto con todos los ID de los tuiteros que se han prestado al experimento.
Arrays, Listas, Colecciones y Tuplas
Los arrays, o como yo los he conocido durante toda mi vida, las matrices (debido a que en ingeniería eléctrica las tenemos hasta en la sopa), se podrían definir como un conjunto de variables, no necesariamente del mismo tipo (o sea, que pueden ser números, letras o una combinación de ambas – lo que normalmente se denomina alfanumérico), que se agrupan bajo una denominación común. En Latinoamérica también se conocen como arreglos.
En la imagen que se muestra a continuación, podemos hacernos una idea de lo que es una matriz de 3 x 3, es decir, 3 filas por 3 columnas. La primera fila, contiene los elementos 11, 21, 31; la segunda fila 12, 22, 32; la tercera fila 13, 23 y 33; igualmente, la primera columna contiene 11, 12, 13; la segunda columna 21, 22, 23 y la tercera columna 31, 32, 33.
Una matriz puede ser multidimensional (en la imagen anterior, es de 3 dimensiones), o unidimensional (1 dimensión, o sea, de 1 sola fila ó 1 sola columna). Python simplifica esto al máximo, ya que a las que tiene 1 sola fila o columna la llama Lista, y siempre se escribe entre corchetes (son los símbolos [ ] de nuestro teclado).
Listas
Es una estructura de datos formada por una secuencia ordenada de objetos (no necesariamente del mismo tipo, esto es, que pueden ser números, cadenas, e incluso una mezcla de ellos, etc) separados por comas y dispuestos entre corchetes, tal y como se muestra a continuación:
La secuencia de datos empieza siempre por cero, es decir:
En la lista «numeros», el primer valor, de índice 0, vale 1; el segundo valor, de índice 1, vale 2; el tercer valor, de índice2, vale 3; el cuarto valor, de índice 3, vale 4.
En la lista «datos», el primer valor, de índice 0, vale 4; el segundo valor, de índice 1, vale “una cadena”; el tercer valor, de índice 2, vale -15; el cuarto valor, de índice 3, vale 3.14; y el quinto valor, de índice 4, vale “otra cadena”.
De esta forma, si queremos ver lo que tiene el índice 0, hacemos:
Con el resultado de:
Podemos definir una lista bien dejándola vacía o asignándole valores, y no necesariamente han de ser del mismo tipo:
Cada vez que incorporamos un elemento a la lista, lo realiza en una posición, llamada índice, que no cambia a menos que se lo digamos. Como la mayoría de los lenguajes de programación, los índices empiezan por cero (0), con lo que el último a recorrer será, siendo n el numero máximo de índices introducidos, n – 1.
Así, podríamos ver los distintos valores que toman los índices de la lista:
Teniendo un resultado de:
Vamos a proceder a cargar en memoria, en formato lista, nuestro archivo de tuiteros, para así ver con un ejemplo más claro las listas, aunque saltemos “un poco” al tema de los archivos, pero es interesante la práctica con él.
Carga desde archivo de texto
Si tenemos en la misma carpeta donde estamos practicando el archivo ‘tuiteros.txt’, no tendremos problemas en abrirlo desde Python, y cargarlo por completo en una lista. Si existen problemas, deberemos colocar la ruta completa hasta el archivo ‘tuiteros.txt’.
Si abrimos el archivo de la forma tradicional, vemos que entre ID e ID de Twitter existe un salto de linea, es decir, los ID están colocados línea a línea, de la forma:
Por tanto, debemos quitarle ese salto de línea cuando los introduzcamos en la lista.
El procedimiento que vamos a realizar es el siguiente:
- Abrimos el archivo
- Defino una lista que llenaré a continuación
- Mediante el empleo de una instrucción llamada “bucle for”, se recorre cada línea del archivo, se le quita el salto de linea final y se introduce en la lista del punto anterior
Se le podrían colocar marcadores para que mostrara lo que está haciendo, pero como la lista es pequeña, podremos comprobarlo posteriormente.
Para añadir elementos a la lista vacía de ListaTuiteros, hemos utilizado el método append().
El resultado de estas dos búsquedas es:
Buscando dentro de la lista
La forma más sencilla de saber si un elemento se encuentra en la lista o no, es “preguntarle” directamente, es decir, devolverá “True” si lo está o “False” si no lo está.
El resultado de esta consulta es:
Y como nos está diciendo Python que hackandbeers está en la lista, le podemos preguntar en qué lugar está con el siguiente método:
Devolviendo el resultado de:
Visualicemos la lista completa de Tuiteros:
Con el resultado de:
Ordenamos la lista de tuiteros:
¿Dónde está ahora hackandbeers?
Y ordenados, primero los números, luego las mayúsculas, y después las minúsculas:
Es decir, el primero y el último han cambiado:
Vamos a invertir la lista y busquemos a hackandbeers de nuevo, empleando el siguiente método:
Vamos a eliminar uno de los ID
Joooo, pobrecito Kirzahk.
Bucles FOR
Los bucles son los mecanismos que disponemos para repetir instrucciones un número “limitado” de veces. Entrecomillamos “limitado” porque podríamos definirlos de forma que no lo fueran. No es lo habitual, pero no debemos cerrarnos en banda.
Python tiene una extraordinaria potencia a la hora de manipular los bucles FOR, por lo que los trataremos ampliamente, junto a las estructuras de datos, y como sé que me permitiréis mi particular “ida de pinza”, vamos a utilizar la lista de los tuiteros que empleamos con tanto honor, tal y como quedé en su última utilización
Podemos recorrer la lista de los tuiteros de dos formas: recorriéndola por índices o por ítems.
Se obtendrá el mismo resultado.
Otra de las propiedades alucinantes de Python es que podemos recorrer los caracteres de una cadena de texto, y ejecutar el bucle respecto a ellos:
Su salida es:
Copiar listas
Se puede copiar una lista en otra, por ejemplo:
También podemos copiar una lista con el siguiente proceder:
Dividir listas
Los “dos puntos” se emplean para dividir la lista. Sólo que si no se le pasan parámetros, lo que hace es copiarla. Si le pasamos parámetros, por ejemplo, ListaTuiteros[0:4], dividiría la lista desde el elemento 0 al elemento 4 (incluido el cero y excluido el 4).
Fijaos que para indicar el último elemento de la lista, hemos empleado [-1].
Podríamos concatenar 2 listas:
Y ahora el primer y último tuitero de la lista son:
Vamos a crear una Superlista, de 328 elementos:
Ahora podríamos ver cuantas veces se repiten los tuiteros que se encuentren en la SuperLista, por ejemplo:
Borrar listas
Tuplas
Las Tuplas es una estructura que no se puede modificar, una vez definida.
Carguemos de nuevo la Lista de Tuiteros original, metiéndola en una Tupla para que no podamos modificarla:
Intentemos añadir ahora a mi CMLGSP a la tupla:
El propio entorno de Visual Studio Code nos está avisando que no se puede, pero si ejecutamos, nos dará un error.
Conjuntos
Son colecciones de elementos desordenados, que Python ordena por “arte del birlibirloque”, pero que tienen la característica que siempre se expresan entre llaves { } y que no pueden repetirse.
Teíamos en memoria la SuperLista con elementos repetidos… ¿Se la pasamos al conjunto a ver qué hace?
Y su resultado es:
Es decir, se han unificado todos los resultados repetidos; también observaréis que sigue un orden desconocido, y que su presentación tiene llaves.
En los conjuntos podemos buscar si aparecen determinados items o no.
Y su resultado:
Una vez que sabemos que están “ordenados”, podemos pasar el conjunto a lista de nuevo.
Para la próxima entrega, veremos los Diccionarios, empleando, ya que la tenemos, la ListaTuiteros que ya tenemos creada.
Muchísimas gracias por vuestro interés.