Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Següent revisió | Revisió prèvia | ||
info:cursos:netacad:python:pe2m4:archivos [07/07/2022 07:43] – creat mate | info:cursos:netacad:python:pe2m4:archivos [09/07/2022 11:42] (actual) – [Procesamiento de archivos de texto (incompleto)] mate | ||
---|---|---|---|
Línia 386: | Línia 386: | ||
4. El objeto de la excepción // | 4. El objeto de la excepción // | ||
- | == Procesamiento de archivos de texto (incompleto) | + | == Procesamiento de archivos de texto |
En esta lección vamos a preparar un archivo de texto simple con contenido breve y simple. | En esta lección vamos a preparar un archivo de texto simple con contenido breve y simple. | ||
- | Te mostraremos algunas técnicas básicas que puedes utilizar para leer el contenido del archivo y poder procesarlo. | + | Te mostraremos algunas técnicas básicas que puedes utilizar para **leer el contenido del archivo** y poder procesarlo. |
El procesamiento será muy simple: vas a copiar el contenido del archivo a la consola y contarás todos los caracteres que el programa ha leído. | El procesamiento será muy simple: vas a copiar el contenido del archivo a la consola y contarás todos los caracteres que el programa ha leído. | ||
Línia 400: | Línia 400: | ||
Por ejemplo, si estás utilizando un sistema operativo Unix/Linux configurado para usar UTF-8 como una configuración de todo el sistema, la función open() puede verse de la siguiente manera: | Por ejemplo, si estás utilizando un sistema operativo Unix/Linux configurado para usar UTF-8 como una configuración de todo el sistema, la función open() puede verse de la siguiente manera: | ||
+ | <code python> | ||
stream = open(' | stream = open(' | ||
+ | </ | ||
Donde el argumento de codificación debe establecerse en un valor dentro de una cadena que representa la codificación de texto adecuada (UTF-8, en este caso). | Donde el argumento de codificación debe establecerse en un valor dentro de una cadena que representa la codificación de texto adecuada (UTF-8, en este caso). | ||
Línia 409: | Línia 409: | ||
- | Nota | + | Nota: A los fines de nuestros experimentos con el procesamiento de archivos que se llevan a cabo en esta sección, vamos a utilizar un conjunto de archivos precargados (p. Ej., los archivos tzop.txt, o text.txt) con los cuales podrás trabajar. Si deseas trabajar con tus propios archivos localmente en tu máquina, te recomendamos que lo hagas y que utilices IDLE o cualquier otro Entorno de Desarrollo para llevar a cabo tus propias pruebas. |
+ | <code python> | ||
+ | # Se abre el archivo tzop.txt en modo lectura, devolviéndolo como un objeto del tipo archivo: | ||
+ | stream = open(" | ||
+ | |||
+ | # Se imprime el contenido del archivo: | ||
+ | print(stream.read()) | ||
+ | </ | ||
+ | |||
+ | La lectura del contenido de un archivo de texto se puede realizar utilizando diferentes métodos; ninguno de ellos es mejor o peor que otro. Depende de ti cual de ellos prefieres y te gusta. | ||
+ | |||
+ | Algunos de ellos serán a veces más prácticos y otros más problemáticos. Se flexible. No tengas miedo de cambiar tus preferencias. | ||
+ | |||
+ | El más básico de estos métodos es el que ofrece la función '' | ||
+ | |||
+ | Si se aplica a un archivo de texto, la función es capaz de: | ||
+ | * Leer un número determinado de caracteres (incluso solo uno) del archivo y devolverlos como una cadena. | ||
+ | * Leer todo el contenido del archivo y devolverlo como una cadena. | ||
+ | * Si no hay nada más que leer (el cabezal de lectura virtual llega al final del archivo), la función devuelve una cadena vacía. | ||
+ | |||
+ | Comenzaremos con la variante más simple y usaremos un archivo llamado // | ||
+ | < | ||
+ | Lo hermoso es mejor que lo feo. | ||
+ | Explícito es mejor que implícito. | ||
+ | Simple es mejor que complejo. | ||
+ | Complejo es mejor que complicado. | ||
+ | </ | ||
+ | |||
+ | |||
+ | Ahora observa el código en el editor y analicémoslo. | ||
+ | |||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | try: | ||
+ | counter = 0 | ||
+ | stream = open(' | ||
+ | char = stream.read(1) | ||
+ | while char != '': | ||
+ | print(char, end='' | ||
+ | counter += 1 | ||
+ | char = stream.read(1) | ||
+ | stream.close() | ||
+ | print(" | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | La rutina es bastante simple: | ||
+ | * Se usa el mecanismo try-except y se abre el archivo con el nombre (text.txt en este caso). | ||
+ | * Intenta leer el primer carácter del archivo (char = stream.read(1)). | ||
+ | * Si tienes éxito (esto se demuestra por el resultado positivo de la condición while), se muestra el carácter (nota el argumento end=, ¡es importante! ¡No querrás saltar a una nueva línea después de cada carácter!). | ||
+ | * Tambien, se actualiza el contador (counter), | ||
+ | * Intenta leer el siguiente carácter y el proceso se repite. | ||
+ | |||
+ | Si estás absolutamente seguro de que la longitud del archivo es segura y puedes leer todo el archivo en la memoria de una vez, puedes hacerlo: la función read(), invocada sin ningún argumento o con un argumento que se evalúa a None, hará el trabajo por ti. | ||
+ | |||
+ | Recuerda: **el leer un archivo muy grande (en terabytes) usando este método puede dañar tu sistema operativo**. | ||
+ | |||
+ | No esperes milagros: la memoria de la computadora no se puede extender. | ||
+ | |||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | try: | ||
+ | counter = 0 | ||
+ | stream = open(' | ||
+ | content = stream.read() | ||
+ | for char in content: | ||
+ | print(char, end='' | ||
+ | counter += 1 | ||
+ | stream.close() | ||
+ | print(" | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | |||
+ | </ | ||
+ | |||
+ | Vamos a analizarlo: | ||
+ | |||
+ | Abre el archivo, como anteriormente se hizo. | ||
+ | Lee el contenido mediante una invocación de la función '' | ||
+ | Después, se procesa el texto, iterando con un bucle //for// su contenido, y se actualiza el valor del contador en cada vuelta del bucle. | ||
+ | El resultado será exactamente el mismo que en el ejemplo anterior. | ||
+ | |||
+ | == Procesando archivos de texto: readline() | ||
+ | Si deseas manejar el contenido del archivo **como un conjunto de líneas**, no como un montón de caracteres, el método '' | ||
+ | |||
+ | El método intenta **leer una línea completa de texto del archivo**, y la devuelve como una cadena en caso de éxito. De lo contrario, devuelve una cadena vacía. | ||
+ | |||
+ | Esto abre nuevas oportunidades: | ||
+ | |||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | try: | ||
+ | character_counter = line_counter = 0 | ||
+ | stream = open(' | ||
+ | line = stream.readline() | ||
+ | while line != '': | ||
+ | line_counter += 1 | ||
+ | for char in line: | ||
+ | print(char, end='' | ||
+ | character_counter += 1 | ||
+ | line = stream.readline() | ||
+ | stream.close() | ||
+ | print(" | ||
+ | print(" | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | Como puedes ver, la idea general es exactamente la misma que en los dos ejemplos anteriores. | ||
+ | |||
+ | == Procesando archivos de texto: readlines() | ||
+ | Otro método, que maneja el archivo de texto como un conjunto de líneas, no como caracteres, es '' | ||
+ | |||
+ | Cuando el método '' | ||
+ | |||
+ | Si no estás seguro de si el tamaño del archivo es lo suficientemente pequeño y no deseas probar el sistema operativo, puedes convencer al método '' | ||
+ | |||
+ | Siéntete libre de experimentar con el siguiente código de ejemplo para entender cómo funciona el método '' | ||
+ | |||
+ | <code python> | ||
+ | stream = open(" | ||
+ | print(stream.readlines(20)) | ||
+ | print(stream.readlines(20)) | ||
+ | print(stream.readlines(20)) | ||
+ | print(stream.readlines(20)) | ||
+ | stream.close() | ||
+ | </ | ||
+ | |||
+ | **El tamaño máximo del búfer de entrada aceptado se pasa al método como argumento.** | ||
+ | |||
+ | Puedes esperar que '' | ||
+ | |||
+ | Nota: cuando no hay nada que leer del archivo, el método devuelve una lista vacía. Úsalo para detectar el final del archivo. | ||
+ | |||
+ | Puedes esperar que al aumentar el tamaño del búfer mejore el rendimiento de entrada, pero no hay una regla de oro para ello: intenta encontrar los valores óptimos por ti mismo. | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | try: | ||
+ | character_counter = line_counter = 0 | ||
+ | stream = open(' | ||
+ | lines = stream.readlines(20) | ||
+ | while len(lines) != 0: | ||
+ | for line in lines: | ||
+ | line_counter += 1 | ||
+ | for char in line: | ||
+ | print(char, end='' | ||
+ | character_counter += 1 | ||
+ | lines = stream.readlines(10) | ||
+ | stream.close() | ||
+ | print(" | ||
+ | print(" | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | |||
+ | </ | ||
+ | Lo hemos modificado para mostrarte como usar '' | ||
+ | |||
+ | Hemos decidido usar un búfer de 15 bytes de longitud. No pienses que es una recomendación. | ||
+ | |||
+ | Hemos utilizado ese valor para evitar la situación en la que la primera invocación de '' | ||
+ | |||
+ | Queremos que el método se vea obligado a trabajar más duro y que demuestre sus capacidades. | ||
+ | |||
+ | Existen dos bucles anidados en el código: el exterior emplea el resultado de '' | ||
+ | |||
+ | El último ejemplo que queremos presentar muestra un rasgo muy interesante del objeto devuelto por la función open() en modo de texto. | ||
+ | |||
+ | Creemos que puede sorprenderte: | ||
+ | |||
+ | ¿Extraño? De ninguna manera. ¿Usable? Si, por supuesto. | ||
+ | |||
+ | El //protocolo de iteración definido para el objeto del archivo// es muy simple: su método %%__next__%% solo devuelve la siguiente línea leída del archivo. | ||
+ | |||
+ | Además, puedes esperar que el objeto invoque automáticamente a '' | ||
+ | |||
+ | Mira el editor y ve cuan simple y claro se ha vuelto el código. | ||
+ | |||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | try: | ||
+ | character_counter = line_counter = 0 | ||
+ | for line in open(' | ||
+ | line_counter += 1 | ||
+ | for char in line: | ||
+ | print(char, | ||
+ | character_counter += 1 | ||
+ | print(" | ||
+ | print(" | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | == Manejando archivos de texto: write() | ||
+ | Escribir archivos de texto parece ser más simple, ya que hay un método que puede usarse para realizar dicha tarea. | ||
+ | |||
+ | El método se llama '' | ||
+ | |||
+ | No se agrega carácter de nueva línea al argumento de '' | ||
+ | |||
+ | El ejemplo en el editor muestra un código muy simple que crea un archivo llamado newtext.txt (nota: el modo de apertura w asegura que **el archivo se creará desde cero**, incluso si existe y contiene datos) y luego coloca diez líneas en él. | ||
+ | |||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | try: | ||
+ | file = open(' | ||
+ | for i in range(10): | ||
+ | s = " | ||
+ | for char in s: | ||
+ | file.write(char) | ||
+ | file.close() | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | La cadena que se grabará consta de la palabra línea, seguida del número de línea. Hemos decidido escribir el contenido de la cadena carácter por carácter (esto lo hace el bucle interno //for//) pero no estás obligado a hacerlo de esta manera. | ||
+ | |||
+ | Solo queríamos mostrarte que '' | ||
+ | |||
+ | El código crea un archivo con el siguiente texto: | ||
+ | < | ||
+ | línea #1 | ||
+ | línea #2 | ||
+ | línea #3 | ||
+ | línea #4 | ||
+ | línea #5 | ||
+ | línea #6 | ||
+ | línea #7 | ||
+ | línea #8 | ||
+ | línea #9 | ||
+ | línea #10 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ¿Puedes imprimir el contenido del archivo en la consola? | ||
+ | |||
+ | Te alentamos a que pruebes el comportamiento del método '' | ||
+ | |||
+ | Mira el ejemplo en el editor. Hemos modificado el código anterior para escribir líneas enteras en el archivo de texto. | ||
+ | |||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | try: | ||
+ | file = open(' | ||
+ | for i in range(10): | ||
+ | file.write(" | ||
+ | file.close() | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | |||
+ | </ | ||
+ | |||
+ | El contenido del archivo recién creado es el mismo. | ||
+ | |||
+ | Nota: puedes usar el mismo método para escribir en el stream //stderr//, pero no intentes abrirlo, ya que siempre está abierto implícitamente. | ||
+ | |||
+ | Por ejemplo, si deseas enviar un mensaje de tipo cadena a //stderr// para distinguirlo de la salida normal del programa, puede verse así: | ||
+ | <code python> | ||
+ | import sys | ||
+ | sys.stderr.write(" | ||
+ | </ | ||
+ | |||
+ | == ¿Qué es un bytearray? | ||
+ | Antes de comenzar a hablar sobre archivos binarios, tenemos que informarte sobre una de las **clases especializadas que Python usa para almacenar datos amorfos**. | ||
+ | |||
+ | **Los datos amorfos son datos que no tienen forma específica**, | ||
+ | |||
+ | Esto no significa que estos bytes no puedan tener su propio significado o que no puedan representar ningún objeto útil, por ejemplo, gráficos de mapa de bits. | ||
+ | |||
+ | The most important aspect of this is that in the place where we have contact with the data, we are not able to, or simply don't want to, know anything about it. | ||
+ | |||
+ | Los datos amorfos no pueden almacenarse utilizando ninguno de los medios presentados anteriormente: | ||
+ | |||
+ | Debe haber un contenedor especial capaz de manejar dichos datos. | ||
+ | |||
+ | Python tiene más de un contenedor, uno de ellos **es una clase especializada llamada bytearray, como su nombre indica, es un arreglo que contiene bytes (amorfos)**. | ||
+ | |||
+ | Si deseas tener dicho contenedor, por ejemplo, para leer una imagen de mapa de bits y procesarla de alguna manera, debes crearlo explícitamente, | ||
+ | |||
+ | Observa: | ||
+ | <code python> | ||
+ | data = bytearray(10) | ||
+ | </ | ||
+ | |||
+ | Tal invocación crea un objeto bytearray capaz de almacenar diez bytes. | ||
+ | |||
+ | Nota: dicho constructor **llena todo el arreglo con ceros**. | ||
+ | |||
+ | // | ||
+ | |||
+ | Existe una limitación importante: **no debes establecer ningún elemento del arreglo de bytes con un valor que no sea un entero** (violar esta regla causará una excepción // | ||
+ | |||
+ | Puedes **tratar cualquier elemento del arreglo de bytes como un valor entero**, al igual que en el ejemplo en el editor. | ||
+ | |||
+ | <code python> | ||
+ | data = bytearray(10) | ||
+ | |||
+ | for i in range(len(data)): | ||
+ | data[i] = 10 - i | ||
+ | |||
+ | for b in data: | ||
+ | print(hex(b)) | ||
+ | </ | ||
+ | |||
+ | Nota: hemos utilizado dos métodos para iterar el arreglo de bytes, y hemos utilizado la función '' | ||
+ | |||
+ | Ahora te vamos a mostrar **como escribir un arreglo de bytes en un archivo binario**, como no queremos guardar su representación legible, queremos escribir una copia uno a uno del contenido de la memoria física, byte a byte. | ||
+ | |||
+ | Entonces, ¿cómo escribimos un arreglo de bytes en un archivo binario? | ||
+ | |||
+ | Observa el código en el editor. Analicémoslo: | ||
+ | * Primero, inicializamos bytearray con valores a partir de 10; si deseas que el contenido del archivo sea claramente legible, reemplaza el 10con algo como ord(' | ||
+ | * Después, creamos el archivo usando la función open(), la única diferencia en comparación con las variantes anteriores es que el modo de apertura contiene el indicador b. | ||
+ | * El método '' | ||
+ | * El stream se cierra de forma rutinaria. | ||
+ | |||
+ | El método '' | ||
+ | |||
+ | Si los valores difieren de la longitud de los argumentos del método, puede significar que hay algunos errores de escritura. | ||
+ | |||
+ | En este caso, no hemos utilizado el resultado; esto puede no ser apropiado en todos los casos. | ||
+ | |||
+ | Intenta ejecutar el código y analiza el contenido del archivo recién creado. | ||
+ | |||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | data = bytearray(10) | ||
+ | |||
+ | for i in range(len(data)): | ||
+ | data[i] = 10 + i | ||
+ | |||
+ | try: | ||
+ | binary_file = open(' | ||
+ | binary_file.write(data) | ||
+ | binary_file.close() | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | |||
+ | # Ingresa aquí el código que lee los bytes del stream. | ||
+ | </ | ||
+ | |||
+ | Lo vas a usar en el siguiente paso. | ||
+ | |||
+ | == Cómo leer bytes de un stream | ||
+ | La lectura de un archivo binario requiere el uso de un método especializado llamado readinto(), ya que el método no crea un nuevo objeto del arreglo de bytes, sino que llena uno creado previamente con los valores tomados del archivo binario. | ||
+ | |||
+ | Nota: | ||
+ | * El método devuelve el número de bytes leídos con éxito. | ||
+ | * El método intenta llenar todo el espacio disponible dentro de su argumento; si existen más datos en el archivo que espacio en el argumento, la operación de lectura se detendrá antes del final del archivo; el resultado del método puede indicar que el arreglo de bytes solo se ha llenado de manera fragmentaria (el resultado también lo mostrará y la parte del arreglo que no está siendo utilizada por los contenidos recién leídos permanece intacta). | ||
+ | |||
+ | Observa el código a continuación: | ||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | data = bytearray(10) | ||
+ | |||
+ | try: | ||
+ | binary_file = open(' | ||
+ | binary_file.readinto(data) | ||
+ | binary_file.close() | ||
+ | |||
+ | for b in data: | ||
+ | print(hex(b), | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | Analicémoslo: | ||
+ | * Primero, abrimos el archivo (el que se creó usando el código anterior) con el modo descrito como rb. | ||
+ | * Luego, leemos su contenido en el arreglo de bytes llamado data, con un tamaño de diez bytes. | ||
+ | * Finalmente, imprimimos el contenido del arreglo de bytes: ¿Son los mismos que esperabas? | ||
+ | |||
+ | Ejecuta el código y verifica si funciona. | ||
+ | |||
+ | == Cómo leer bytes de un stream | ||
+ | Se ofrece una forma alternativa de leer el contenido de un archivo binario mediante el método denominado '' | ||
+ | |||
+ | Invocado sin argumentos, intenta **leer todo el contenido del archivo en la memoria**, haciéndolo parte de un objeto recién creado de la clase bytes. | ||
+ | |||
+ | Esta clase tiene algunas similitudes con // | ||
+ | |||
+ | Afortunadamente, | ||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | try: | ||
+ | binary_file = open(' | ||
+ | data = bytearray(binary_file.read()) | ||
+ | binary_file.close() | ||
+ | |||
+ | for b in data: | ||
+ | print(hex(b), | ||
+ | |||
+ | except IOError as e: | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | Ten cuidado: **no utilices este tipo de lectura si no estás seguro de que el contenido del archivo se ajuste a la memoria disponible**. | ||
+ | |||
+ | <code python> | ||
+ | from os import strerror | ||
+ | |||
+ | data = bytearray(10) | ||
+ | |||
+ | for i in range(len(data)): | ||
+ | data[i] = 10 + i | ||
+ | |||
+ | try: | ||
+ | binary_file = open(' | ||
+ | binary_file.write(data) | ||
+ | binary_file.close() | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | |||
+ | # Ingresa aquí el código que lee los bytes del stream. | ||
+ | </ | ||
+ | |||
+ | Si el método '' | ||
+ | |||
+ | El método intenta leer la cantidad deseada de bytes del archivo, y la longitud del objeto devuelto puede usarse para determinar la cantidad de bytes realmente leídos. | ||
+ | |||
+ | Puedes usar el método como aquí: | ||
+ | <code python> | ||
+ | try: | ||
+ | binary_file = open(' | ||
+ | data = bytearray(binary_file.read(5)) | ||
+ | binary_file.close() | ||
+ | |||
+ | for b in data: | ||
+ | print(hex(b), | ||
+ | |||
+ | except IOError as e: | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | Nota: los primeros cinco bytes del archivo han sido leídos por el código; los siguientes cinco todavía están esperando ser procesados. | ||
+ | |||
+ | == Copiando archivos: una herramienta simple y funcional | ||
+ | Ahora vas a juntar todo este nuevo conocimiento, | ||
+ | |||
+ | Por supuesto, el propósito no es crear un reemplazo para los comandos como copy de (MS Windows) o cp de (Unix/ | ||
+ | |||
+ | <sxh python> | ||
+ | from os import strerror | ||
+ | |||
+ | source_file_name = input(" | ||
+ | try: | ||
+ | source_file = open(source_file_name, | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | exit(e.errno) | ||
+ | |||
+ | destination_file_name = input(" | ||
+ | try: | ||
+ | destination_file = open(destination_file_name, | ||
+ | except Exception as e: | ||
+ | print(" | ||
+ | source_file.close() | ||
+ | exit(e.errno) | ||
+ | |||
+ | buffer = bytearray(65536) | ||
+ | total = 0 | ||
+ | try: | ||
+ | readin = source_file.readinto(buffer) | ||
+ | while readin > 0: | ||
+ | written = destination_file.write(buffer[: | ||
+ | total += written | ||
+ | readin = source_file.readinto(buffer) | ||
+ | except IOError as e: | ||
+ | print(" | ||
+ | exit(e.errno) | ||
+ | |||
+ | print(total,' | ||
+ | source_file.close() | ||
+ | destination_file.close() | ||
+ | </ | ||
+ | |||
+ | Analicémoslo: | ||
+ | * Las líneas 3 a la 8: solicitan al usuario el nombre del archivo a copiar e intentan abrirlo para leerlo; se termina la ejecución del programa si falla la apertura; nota: emplea la función '' | ||
+ | * Las líneas 10 a la 16: repiten casi la misma acción, pero esta vez para el archivo de salida. | ||
+ | * La línea 18: prepara una parte de memoria para transferir datos del archivo fuente al destino; Tal área de transferencia a menudo se llama un búfer, de ahí el nombre de la variable; el tamaño del búfer es arbitrario; en este caso, decidimos usar 64 kilobytes; técnicamente, | ||
+ | * Línea 19: cuenta los bytes copiados: este es el contador y su valor inicial. | ||
+ | * Línea 21: intenta llenar el búfer por primera vez. | ||
+ | * Línea 22: mientras se obtenga un número de bytes distinto a cero, repite las mismas acciones. | ||
+ | * Línea 22: escribe el contenido del búfer en el archivo de salida (nota: hemos usado un segmento para limitar la cantidad de bytes que se escriben, ya que '' | ||
+ | * Línea 24: actualiza el contador. | ||
+ | * Línea 25: lee el siguiente fragmento de archivo. | ||
+ | * Las líneas 30 a la 32: limpieza final: el trabajo está hecho. | ||
+ | |||
+ | == Puntos Clave | ||
+ | 1.Para leer el contenido de un archivo, se pueden utilizar los siguientes métodos: | ||
+ | * read(number): | ||
+ | * readline(): lee una sola línea del archivo de texto. | ||
+ | * readlines(number): | ||
+ | * readinto(bytearray): | ||
- | A los fines de nuestros experimentos con el procesamiento de archivos que se llevan a cabo en esta sección, vamos a utilizar | + | 2. Para escribir contenido nuevo en un archivo, se pueden utilizar los siguientes métodos: |
+ | * write(string): | ||
+ | * write(bytearray): escribe todos los bytes de un bytearray | ||
+ | 3. El método '' | ||
+ | <code python> | ||
+ | for line in open(" | ||
+ | print(line, end='' | ||
+ | </ | ||
+ | El código copia el contenido del archivo a la consola, línea por línea. **Nota**: el stream se cierra **automáticamente** cuando llega al final del archivo. | ||