Nombres de Archivo: continuación
Supongamos que estás interesado en un archivo en particular ubicado en el directorio dir, y con el nombre de archivo.
Supongamos también que deseas asignar a una cadena el nombre del archivo.
En sistemas Unix/Linux, se ve de la siguiente manera:
nombre = "/dir/archivo"
Pero si intentas codificarlo para el sistema Windows:
nombre = "\dir\archivo"
obtendrás una sorpresa desagradable: Python generará un error o la ejecución del programa se comportará de manera extraña, como si el nombre del archivo se hubiera distorsionado de alguna manera.
De hecho, no es extraño en lo absoluto, pero es bastante obvio y natural. Python usa la \
como un caracter de escape (como \n
).
Esto significa que los nombres de archivo de Windows deben escribirse de la siguiente manera:
nombre = "\\dir\\archivo"
Afortunadamente, también hay una solución más. Python es lo suficientemente inteligente como para poder convertir diagonales en diagonales invertidas cada vez que descubre que el sistema operativo lo requiere.
Esto significa que cualquiera de las siguientes asignaciones:
nombre = "/dir/archivo"
nombre = "c:/dir/archivo"
funcionará también con Windows.
Cualquier programa escrito en Python (y no solo en Python, porque esa convención se aplica a prácticamente todos los lenguajes de programación) no se comunica con los archivos directamente, sino a través de algunas entidades abstractas que se nombran de manera diferente en los distintos lenguajes o entornos, los términos más utilizados son handles (un tipo de puntero inteligente) o streams (una especie de canal) (los usaremos como sinónimos aquí).
El programador, que tiene un conjunto de funciones y métodos, puede realizar ciertas operaciones en el stream, que afectan los archivos reales utilizando mecanismos contenidos en el núcleo del sistema operativo.
De esta forma, puedes implementar el proceso de acceso a cualquier archivo, incluso cuando el nombre del archivo es desconocido al momento de escribir el programa.
Las operaciones realizadas con el stream abstracto reflejan las actividades relacionadas con el archivo físico.
Para conectar (vincular) el stream con el archivo, es necesario realizar una operación explícita.
La operación de conectar un stream con un archivo es llamada abrir el archivo, mientras que desconectar el enlace se denomina cerrar el archivo.
Por lo tanto, la conclusión es que la primera operación realizada en el stream es siempre open (abrir)
y la ultima es close (cerrar)
. El programa, en efecto, es libre de manipular el stream entre estos dos eventos y manejar el archivo asociado.
Esta libertad está limitada por las características físicas del archivo y la forma en que se abrió el archivo.
Digamos nuevamente que la apertura del stream puede fallar, y puede ocurrir debido a varias razones: la más común es la falta de un archivo con un nombre específico.
También puede suceder que el archivo físico exista, pero el programa no puede abrirlo. También existe el riesgo de que el programa haya abierto demasiados streams, y el sistema operativo específico puede no permitir la apertura simultánea de más de n archivos (por ejemplo, 200).
Un programa bien escrito debe detectar estas aperturas fallidas y reaccionar en consecuencia.