🎃 Grandes descuentos en libros en línea, eformaciones y vídeos*. Código CALABAZA30. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Algoritmia
  3. Archivos
Extrait - Algoritmia Técnicas fundamentales de programación – Ejemplos en Python (numerosos ejercicios corregidos) (Nueva edición)
Extractos del libro
Algoritmia Técnicas fundamentales de programación – Ejemplos en Python (numerosos ejercicios corregidos) (Nueva edición) Volver a la página de compra del libro

Archivos

El sistema de archivos

1. Preámbulo

¿No está cansado de tener que introducir siempre los valores a mano? ¿De verdad funcionan así los programas?

Para dar una solución a la primera pregunta, en este capítulo veremos la persistencia de datos en un archivo. Persistencia significa simplemente que vamos a almacenar físicamente en el ordenador los datos que el programa va a utilizar y también los datos que el programa puede compilar.

Antes de ver cómo almacenar información en archivos, tenemos que ver qué son realmente estos archivos.

2. Directorio y archivo

Normalmente está acostumbrado a gestionar sus directorios y archivos de forma gráfica mediante un explorador de archivos. Debe saber que esta gestión también se puede realizar mediante un terminal o una consola ya que, de lo contrario, ningún programa informático podría acceder a los archivos.

Un archivo es un conjunto de información almacenada en un disco con el mismo nombre. Independientemente de cuál sea el tipo de archivo, se trata de un conjunto de bytes porque el lenguaje binario es el único lenguaje que entiende la máquina, como se muestra en la siguiente figura, que representa un archivo de texto en bytes. Esta figura representa el principio de este capítulo escrito con el programa Word (Sublime Text permite acceder al archivo en bruto independientemente...

Los distintos tipos de archivos

Un archivo se define por su nombre o identificador, pero sobre todo por su tipo, representado por su extensión.

El tipo de archivo indica al ordenador cómo está organizada la información, es decir, cómo está formateada. Con esta indicación, el ordenador también puede determinar con qué aplicación debe abrir o ejecutar el archivo.

Tomemos el ejemplo de nuestros scripts Python. Su extensión es .py, lo que indica al intérprete de Python que puede interpretarlos. Si le pide al intérprete de Python que ejecute un script con extensión ".xls", no entenderá el archivo y mostrará un error.

En esta sección, nos centraremos en algunos ejemplos de los tipos de archivos de prueba que los programas pueden manipular, empezando por los archivos de texto simples y terminando con algunos de los formatos de archivos de texto utilizados en informática.

1. Texto no formateado

Los archivos de texto sin formato suelen tener la extensión ".txt" o, algunas veces, ninguna. Son los archivos más sencillos: consisten únicamente en texto codificado utilizando principalmente la tabla ASCII, como se muestra en la figura siguiente:

images/cap8_pag7.png

Un archivo de texto sin formato

Las principales codificaciones para archivos de texto son UTF-8 y Latin-1 (principalmente en macOS).

Puede abrir archivos de texto sin formato con aplicaciones como el Bloc de notas o el Editor de texto.

2. Texto formateado

Como el texto se utiliza a menudo para...

Gestión de archivos

Para mejorar la simplicidad, en el resto de este capítulo solo manipularemos archivos de texto sin formato. Dejaremos que el lector estudie por su cuenta el manejo de otros tipos de formatos de archivos. De hecho, proporcionaremos los fundamentos necesarios para manejar cualquier tipo de archivo de texto.

También suponemos que el archivo que se manipula existe en el disco y está en el mismo directorio que el archivo del algoritmo.

1. Abrir y cerrar un archivo

Manipular un archivo significa utilizar un puntero, conocido como cursor para archivos. Un puntero implica gestionar su asignación y desasignación.

Este puntero es una variable ARCHIVO. Para asignarla, abriremos el archivo con la función ABRIR-ARCHIVO y para borrarlo, cerraremos el archivo con la función CERRAR-ARCHIVO.

La función ABRIR-ARCHIVO recibe dos argumentos:

  • El nombre del archivo que se debe abrir.

  • El modo de apertura:

  • escritura para escribir en el archivo empezando por la primera línea.

  • lectura para recuperar datos del archivo en forma de cadenas de caracteres. 

VAR  
   nombre_archivo : ARCHIVO  
  
nombre_archivo <- ABRIR_ARCHIVO("nombre del archivo", "modo de apertura ") 

La función CERRAR recibe como argumento el archivo de tipo ARCHIVO que se va a cerrar.

CERRAR_ARCHIVO(nombre_archivo) 

PROGRAMA Apertura_cierre_archivo  
VAR  
   nombre_archivo : ARCHIVO 
   nombre_del_archivo : CADENA 
INICIO 
   ESCRIBIR("Escriba el nombre del archivo") 
   nombre_del_archivo <- LEER() 
   nombre_archivo <- ABRIR_ARCHIVO(nombre del archivo...

Acceso a archivos con Python

1. Abrir y cerrar un archivo

Como en los algoritmos, si quiere manipular un archivo tiene que abrirlo. En Python, esto se hace con la función open.

nombre_archivo = open("nombre del archivo", "modo", "encoding") 

El encoding es opcional y representa la codificación de los caracteres del archivo, por ejemplo UTF8.

El modo representa las posibles acciones sobre el archivo:

  • Acceso de modo lectura: r.

  • Acceso de modo escritura: w.

  • Acceso de modo adición: a.

La diferencia entre el acceso en modo escritura y en modo adición es bastante implícita. Cuando se escribe, se hace desde el principio del archivo, aunque eso signifique borrar lo que ya hay en él. Cuando se añade, se mueve automáticamente al final del archivo para añadir información al final del archivo sin borrar nada del contenido.

A diferencia de la algoritmia, si el archivo no existe, Python lo creará durante la instrucción open, en modo escritura o adición. Abrir un archivo inexistente en modo Lectura provoca un error y el script termina.

Cuando manipula un archivo en Python, tiene que cerrarlo después de usarlo, para no causar ninguna inconsistencia o bloqueo en el archivo. Para hacer esto en Python, llame a la función close en la variable que representa el archivo.

nombre_archivo.close() 

2. Leer un archivo

En Python, un archivo se puede leer utilizando tres funciones, donde todas ellas devuelven una cadena:

  • Leer todo el archivo de una vez: read().

  • Leer una línea del archivo: readline().

  • Leer todas las líneas del archivo (devuelve una lista de cadenas): readlines()

Vamos a ver un ejemplo de cómo se puede utilizar cada una de estas funciones.

a. read()

Con la función read, puede leer todo el texto del archivo en una sola instrucción, incluidos los saltos de línea.

name =  input("Escriba el nombre de su archivo ") 
archivo = open(name,'r'...

Ejercicios

1. Ejercicio 1

Indique el algoritmo que genera automáticamente las tablas de multiplicar del 1 al 20 bien escritas en un archivo de texto. Codifique el script Python correspondiente.

2. Ejercicio 2

Indique el algoritmo que copia un archivo de texto cuyo nombre introduce el usuario en otro archivo de texto llamado "copia.txt". Codifique el script Python correspondiente.

3. Ejercicio 3

Indique el algoritmo que compara dos archivos de texto y muestra la primera diferencia. Codifique el script Python correspondiente.

4. Ejercicio 4

Indique el algoritmo que encuentra y muestra la línea más larga de un archivo de texto. Codifique el script Python correspondiente.

5. Ejercicio 5

Codifique el script de Python que sustituye todos los espacios de un archivo de texto por un espacio triple. Por ejemplo, "el gato" se convertirá en "el   gato".

6. Ejercicio 6

Codifique el script de Python que cuenta el número de ocurrencias de cada carácter en un archivo de texto utilizando un diccionario.

7. Ir más lejos

a. Ejercicio 7

Codifique el script Python que lista todos los archivos de un directorio cuyo introduceel usuario.

b. Ejercicio 8

Codifique el script Python que pide al usuario el nombre de un directorio para buscar si este directorio contiene un archivo o un directorio cuyo nombre también introduce el usuario.