1 00:00:00,560 --> 00:00:14,740 Bueno, pues aquí estamos un día más en nuestro módulo de Python, ¿verdad? Estamos ya a unidad 5. Ya nos queda poquito, porque si veis aquí, la unidad 5 va del 5 de marzo al 16 de abril. 2 00:00:15,400 --> 00:00:23,620 Y luego ya empezamos con programación en unidad de objetos, encapsulación, herencia, polimorfismo, que va a ser muy interesante y entretenido, ya veréis. 3 00:00:23,620 --> 00:00:27,820 Pero vamos, que ya prácticamente está todo hecho 4 00:00:27,820 --> 00:00:31,660 Este tema pues va de ficheros 5 00:00:31,660 --> 00:00:34,859 No de cómo leer y escribir en ficheros, bastante sencillito 6 00:00:34,859 --> 00:00:37,200 Pues he subido aquí un código plano 7 00:00:37,200 --> 00:00:41,640 Que tendréis que copiarlo en un Visual Studio Code 8 00:00:41,640 --> 00:00:43,719 O en el IDE que estáis utilizando 9 00:00:43,719 --> 00:00:44,619 ¿Vale? 10 00:00:44,899 --> 00:00:46,140 Aparte de eso... 11 00:00:46,140 --> 00:00:47,740 Ay, perdonad, vamos a por otra vez 12 00:00:47,740 --> 00:00:51,939 Como veis, aquí hago referencia a una serie de ficheros 13 00:00:51,939 --> 00:01:00,079 registros.txt, datos.vim, archivo.txt, prueba.txt. 14 00:01:01,079 --> 00:01:11,939 Claro, estos ficheros tendréis que tenerlos, porque si no os va a dar error de que no consiga abrirlos. 15 00:01:12,799 --> 00:01:13,620 ¿De acuerdo? 16 00:01:13,620 --> 00:01:16,780 vale 17 00:01:16,780 --> 00:01:20,019 yo creo que esto de datos.bin 18 00:01:20,019 --> 00:01:22,500 lo vamos a sustituir por registros.txt 19 00:01:22,500 --> 00:01:23,840 luego lo 20 00:01:23,840 --> 00:01:25,760 lo adapto 21 00:01:25,760 --> 00:01:28,060 vale, yo ya por mi parte 22 00:01:28,060 --> 00:01:29,640 lo tengo aquí, veis 23 00:01:29,640 --> 00:01:31,819 que tengo aquí el código 24 00:01:31,819 --> 00:01:34,019 en .py 25 00:01:34,019 --> 00:01:35,519 y luego los ficheros 26 00:01:35,519 --> 00:01:37,900 de acuerdo, para que veamos 27 00:01:37,900 --> 00:01:39,379 como se van cambiando y tal 28 00:01:39,379 --> 00:01:42,019 entonces vamos a abrirlo 29 00:01:42,019 --> 00:01:55,700 verdad que se abre aquí open folder y lo tengo aquí así que genial y es 30 00:01:55,700 --> 00:01:58,959 interesante ozor 31 00:01:59,260 --> 00:02:05,980 lo tenemos aquí entonces hemos dicho que vamos a cambiarle aquí registros se lo 32 00:02:05,980 --> 00:02:11,000 vamos a poner aquí mejor y así no tenemos que hacer más cosillas 33 00:02:11,000 --> 00:02:18,460 Vale, pues vamos a explicar un poco el código que os he dejado como ejemplo 34 00:02:18,460 --> 00:02:23,319 que os va a servir para que sepáis un poco de qué va el tema 35 00:02:23,319 --> 00:02:26,840 obviamente podréis profundizar mucho más en los contenidos 36 00:02:26,840 --> 00:02:32,479 pero bueno, aquí importa esta librería que nos va a dar algunas funcionalidades 37 00:02:32,479 --> 00:02:34,379 que están bien a la hora de manejar ficheros 38 00:02:34,379 --> 00:02:52,560 Pero bueno, lo importante es que controlemos esto de cómo abrirlos y los modos de apertura y cómo posicionar el puntero, que es como si fuera el cursor dentro del fichero para ir modificando y demás. 39 00:02:52,560 --> 00:03:01,639 Entonces, ¿cómo abriríamos un fichero en otro idioma más estándar que Python? 40 00:03:03,400 --> 00:03:14,979 Tendríamos una variable así como de file, que sería como un input o algo así, un file input. 41 00:03:14,979 --> 00:03:19,800 entonces le decimos que abra 42 00:03:19,800 --> 00:03:21,780 el fichero de pruebas.txt 43 00:03:21,780 --> 00:03:22,740 por ejemplo 44 00:03:22,740 --> 00:03:24,580 en modo lectura 45 00:03:24,580 --> 00:03:26,539 con este encoding 46 00:03:26,539 --> 00:03:28,400 entonces 47 00:03:28,400 --> 00:03:31,419 con el fichero le decimos que lea 48 00:03:31,419 --> 00:03:32,860 las líneas del fichero 49 00:03:32,860 --> 00:03:35,180 y la mete en una lista 50 00:03:35,180 --> 00:03:37,780 que la metemos en la variable 51 00:03:37,780 --> 00:03:39,560 líneas, luego lo imprimimos 52 00:03:39,560 --> 00:03:41,120 y luego lo cerramos 53 00:03:41,120 --> 00:03:43,599 ¿vale? una apertura 54 00:03:43,599 --> 00:03:44,319 y un cierre 55 00:03:44,979 --> 00:04:02,099 Pero esto funciona en Python, ¿vale? Pero no es como se hace normalmente, no es como se gestionan ficheros normalmente, ¿vale? Simplemente os lo he puesto para que veáis que lo que se hace en otros lenguajes sí que se puede hacer aquí también. 56 00:04:02,099 --> 00:04:05,539 es un rollo eso de ahora lo abro 57 00:04:05,539 --> 00:04:08,259 cuando termine de utilizar el fichero lo tengo que cerrar 58 00:04:08,259 --> 00:04:11,120 si no lo dejo abierto y es ineficiente 59 00:04:11,120 --> 00:04:14,939 lo que hacemos con el width es que tú lo abres aquí 60 00:04:14,939 --> 00:04:18,000 y cuando se termine todo lo que está haciendo dentro del width 61 00:04:18,000 --> 00:04:19,660 lo va a cerrar automáticamente 62 00:04:19,660 --> 00:04:22,839 entonces nos ahorramos eso de tener que pensar 63 00:04:22,839 --> 00:04:25,759 si el fichero está abierto, si estoy haciendo cosas 64 00:04:25,759 --> 00:04:28,660 si lo cierro aquí y luego lo voy a tener que volver a abrir 65 00:04:28,660 --> 00:04:31,839 me va a consumir recursos, no, ¿vale? 66 00:04:32,100 --> 00:04:43,620 Utilizamos el width para abrirlo. Hacemos lo que tengamos que hacer y cuando ya salgamos del width se cierra automáticamente. Entonces es como mucho más cómodo. 67 00:04:44,339 --> 00:04:56,040 Entonces, acceso secuencial. Ponemos width open, el nombre del fichero, modo lectura y el encoding que utilizamos y lo guardamos en la variable file. 68 00:04:56,040 --> 00:04:59,399 Bueno, en este caso F, ¿no? 69 00:04:59,620 --> 00:05:01,019 Lo puedes llamar como quieras 70 00:05:01,019 --> 00:05:03,600 Archivo, fichero, texto, lo que quieras 71 00:05:03,600 --> 00:05:07,620 Y luego simplemente pues lo recorremos con unas líneas 72 00:05:07,620 --> 00:05:11,360 ¿Vale? Esto de strip es para quitar espacios 73 00:05:11,360 --> 00:05:14,480 Pero bueno, lo puedes borrar igualmente 74 00:05:14,480 --> 00:05:15,920 ¿Qué más? 75 00:05:16,259 --> 00:05:17,040 Acceso aleatorio 76 00:05:17,040 --> 00:05:23,220 Esto significa que vamos a acceder a las posiciones que a nosotros nos interesen 77 00:05:23,220 --> 00:05:24,120 ¿Vale? 78 00:05:24,120 --> 00:05:35,199 Para mover el puntero utilizamos la función seek. Aquí lo que estamos haciendo es moverlo a la posición 10 y luego leer 5 posiciones del fichero de registros txt. 79 00:05:35,699 --> 00:05:36,779 Vamos a echarle un ojo. 80 00:05:41,040 --> 00:05:51,000 Entonces, simplemente tengo esta frase y lo que hemos dicho es que nos movemos 10 posiciones, 1, 2, 3, 4, 5, 6, 7, 8, 9 y 10, hasta aquí. 81 00:05:51,000 --> 00:06:05,899 Y de aquí leemos 5. 1, 2, 3, 4 y 5. Así que lo que va a salir es mos espacio p. Vamos a darle un tiento. A ver si acciona. Exacto, aquí lo tenemos. Mos espacio p. 82 00:06:08,399 --> 00:06:19,139 Aquí ha leído la línea de fichero porque la hemos abierto en modo lectura y aquí hemos accedido a las posiciones que nos han interesado. 83 00:06:19,139 --> 00:06:42,420 ¿Qué más? Acceso controlado. Aquí es donde utilizamos la librería esta de OS. Si indagáis un poco veréis que tenéis muchas más aplicaciones, muchas más funcionalidades que podéis utilizar si en algún momento lo necesitáis. 84 00:06:42,420 --> 00:07:01,860 Le podéis echar un vistazo. Y aquí lo que hacemos es, cuando digo acceso controlado, es que si, por ejemplo, no podéis abrir el fichero porque el fichero no existe o porque os da algún error de escritura, de lectura, de apertura, no os va a sacar aquí un error de compilación. 85 00:07:01,860 --> 00:07:25,220 Sino que tenéis la posibilidad de, a través del else, sacar como una especie de excepción y decirle, mira, que hay algo fallado. Es como más profesional, digamos. Entonces, para acceder con la librería OS, ponemos access, el nombre del fichero y el modo de escritura en este caso. 86 00:07:25,220 --> 00:07:47,060 Entonces, luego utilizamos el width idéntico a como lo hemos utilizado aquí. La única diferencia que tenemos aquí es que utilizamos el append. Y aquí leemos bit con bytes también. Esto está muy bien explicado en el contenido, lo podéis echar un ojo. 87 00:07:47,060 --> 00:07:56,379 Si tenéis alguna duda pues ya me comentáis. A es de append. Esto quiere decir que no va a sobreescribir sino que va a añadir. 88 00:07:57,860 --> 00:08:09,120 Entonces aquí estamos añadiendo nueva línea protegida. Si lo ejecuto siete veces, pues cuando me meta en archivos.txt va a haber siete veces nueva línea protegida. 89 00:08:09,120 --> 00:08:13,680 ¿Vale? De hecho no sé si ya lo ejecuto alguna vez 90 00:08:13,680 --> 00:08:15,120 A ver, se llamó archivo 91 00:08:15,120 --> 00:08:17,100 Archivo txt 92 00:08:17,100 --> 00:08:19,560 ¿Ves? Aquí ya está dos veces 93 00:08:19,560 --> 00:08:21,920 Si lo ejecuto una tercera vez 94 00:08:21,920 --> 00:08:23,620 Ya hay una nueva línea 95 00:08:23,620 --> 00:08:25,459 ¿Vale? Eso es el append 96 00:08:25,459 --> 00:08:28,199 Y luego 97 00:08:28,199 --> 00:08:30,899 El operador este más 98 00:08:30,899 --> 00:08:33,600 ¿Vale? Aquí lo que estamos diciendo es que 99 00:08:33,600 --> 00:08:35,519 Lo abrimos en modo lectura 100 00:08:35,519 --> 00:08:37,440 Pero también en escritura con el más 101 00:08:37,440 --> 00:08:54,669 Entonces, hacemos lo mismo, ¿no? Le decimos el nombre del fichero. Tenéis que tener en cuenta de que aquí lo está encontrando porque yo me he situado dentro de la carpeta, ¿de acuerdo? 102 00:08:54,789 --> 00:09:09,669 Si, por ejemplo, abriera directamente el código, no lo encontraría porque yo estoy a la altura del código. Pero como me he situado a la altura de la carpeta, ya ve el código, puede ver todo lo que está dentro de la carpeta. 103 00:09:09,669 --> 00:09:23,610 Y por eso no le tengo que meter una ruta absoluta de C, dos puntos barra, archivos de programa, barra Python, barra código, para que encuentre estos ficheros de texto. 104 00:09:24,629 --> 00:09:32,669 Sino que puedo utilizar la ruta relativa de esta manera porque ya le digo que el archivo está dentro de esta carpeta. 105 00:09:32,669 --> 00:09:57,309 ¿De acuerdo? Entonces hemos dicho que con el R más es modo lectura-escritura. Entonces aquí lo que hacemos es leer el contenido del fichero, separamos por líneas, porque si tiene varias líneas que están separadas por salto de carro, con el split lo separamos en una lista de líneas. 106 00:09:57,309 --> 00:10:14,409 Y aquí con el tel lo que decimos es que le preguntamos en qué posición está el puntero. En este caso está en la 113. Entonces podemos ver que el fichero tiene 113 carácteres porque lo hemos leído entero. 107 00:10:14,409 --> 00:10:27,860 Luego, sacamos las líneas, que son estas de aquí, imprimimos la posición, que es la 113, como hemos dicho antes, y escribimos. 108 00:10:29,159 --> 00:10:30,179 Cambiamos el contenido. 109 00:10:31,179 --> 00:10:35,100 Y entonces, ¿por qué esto es equivalente a un append? 110 00:10:36,019 --> 00:10:45,399 ¿Verdad? Porque si nos metemos en el fichero de prueba, veis que ya se ha añadido varias veces al final. 111 00:10:46,200 --> 00:10:48,039 Porque ya lo he ejecutado tres veces. 112 00:10:48,440 --> 00:10:51,580 si lo quito 113 00:10:51,580 --> 00:10:56,009 lo guardamos y lo volvemos a ejecutar 114 00:10:56,009 --> 00:11:01,379 ya veis que está en vez de la 113 la 69 115 00:11:01,379 --> 00:11:03,080 porque ya tiene menos caracteres 116 00:11:03,080 --> 00:11:05,840 entonces si lo ejecuto solo aparece una vez 117 00:11:05,840 --> 00:11:09,240 esto pasa porque yo he dejado el puntero aquí 118 00:11:09,240 --> 00:11:13,440 entonces cuando le digo que escriba 119 00:11:13,440 --> 00:11:15,720 va a escribir en el siguiente carácter 120 00:11:15,720 --> 00:11:18,080 vale, por eso no sobreescribe 121 00:11:18,080 --> 00:11:20,639 porque ya lo hemos leído antes 122 00:11:20,639 --> 00:11:29,759 Y cada vez que lees el fichero, el cursor se va moviendo. Por eso cuando utilizo aquí el TEL y me pone la línea está en la 69. 123 00:11:30,620 --> 00:11:35,779 Y si nosotros contáramos, seguramente la 69 sea justo esta posición. 124 00:11:40,539 --> 00:11:47,919 Entonces, por eso, como el cursor se queda ahí, cuando le hago un WRITE, escribe desde ahí. 125 00:11:47,919 --> 00:12:03,059 ¿De acuerdo? Y poco más realmente porque al final tenemos que aprender a cómo abrir ficheros, a que con el width no hace falta cerrarlo como haríamos de esta manera. 126 00:12:03,059 --> 00:12:29,659 Podemos investigar un poco con las funcionalidades de la librería OS, pero vamos, que el control de acceso es lo más importante y ya sabéis que se puede entrar como lectura, escritura, lectura, escritura, se puede añadir, hay que tener cuidado de no sobreescribir y tener conciencia de que tenemos un cursor, un puntero, que podemos manipular. 127 00:12:29,659 --> 00:12:40,259 Podemos posicionar donde lo necesitemos, ¿no? Entonces podemos ir recorriendo el fichero en busca de una palabra, por ejemplo, y cuando encontramos esa palabra, pues cambiarla. 128 00:12:41,039 --> 00:12:56,940 O, no sé, se me ocurre, por ejemplo, un programa de encriptado para cifrar, ¿no? Y cuando encuentre una vocal que le ponga 20 letras más adelante del abecedario, por ejemplo. 129 00:12:56,940 --> 00:13:19,580 Pues eso se podría hacer con un cursor de esta manera. Y también daros cuenta de eso, que aquí por ejemplo estamos utilizando registros.txt, lo estamos abriendo, si no existe va a petar, va a dar un fallo porque no estamos utilizando aquí la funcionalidad de la librería OS. 130 00:13:19,580 --> 00:13:35,100 Si no, pues nos daría un mensaje de error. Pero que cuando ejecutáis este código tenéis que tener criados estos archivos. Y si tenéis que leer, pues meterle algo de texto. 131 00:13:35,100 --> 00:13:51,019 ¿De acuerdo? Y ya está. Ya con eso, para el próximo tema ya miraremos programación orientada a objetos y herencia y polimorfismo, todas estas cosas que son muy importantes y le dedicaremos bastante más tiempo. 132 00:13:51,019 --> 00:14:07,279 Así que nada, tema facilito y light para que os relajéis estos días y le podáis meter un poco de apretón a todo lo demás. Así que nada, muchas gracias por atender y nos vemos en el siguiente tema. Adiós.