Archivos

Un archivo es un conjunto de datos en la memoria externa que tiene un nombre. 

Hay dos tipos de archivos en Python:
- texto, que contiene texto partido en una línea; De los caracteres especiales en los archivos de texto, solo puede haber caracteres de nueva línea ("\n") y volver al principio de la línea ("\r" ;);
- binario, que almacena cualquier dato binario sin restricciones (por ejemplo, imágenes, sonidos, videos, etc.).

A continuación, consideraremos trabajar con archivos de texto.

 

El principio de trabajar con un archivo del programa
Consta de tres etapas:
1. abrir un archivo;
2. trabajar con el archivo;
3. cerrar el archivo.
Este principio de funcionamiento se denomina "principio de sándwich"..

Al abrir un archivo, se indica el modo de operación: lectura, escritura o adición de datos al final del archivo. El archivo abierto está bloqueado y otros programas no pueden acceder a él. Después de trabajar con el archivo, debe cerrarlo para interrumpir la conexión con el programa. Cuando se cierra un archivo, todos los cambios realizados por el programa en este archivo se escriben en el disco. Python trabaja con archivos a través de variables de archivo.

La función open() permite abrir un archivo y devuelve una variable de archivo que se puede usar para acceder al archivo.
f = open(file_name, access_mode)
donde:
- file_name - nombre del archivo a abrir
- access_mode - modo de apertura de archivos. Puede ser: lectura, escritura, etc. El modo predeterminado es lectura (r) a menos que se especifique lo contrario. 
 
Lista completa de modos de apertura de archivos

 
El método close() le permite cerrar un archivo.

Ejemplo
Aleta = abrir("entrada.txt") Fout = abrir("salida.txt")    # hacer algo con los archivos fuera.cerrar() Fin.cerrar() Si se abre un archivo existente para escritura, su contenido se destruye. Después del final del programa, todos los archivos abiertos se cierran automáticamente.
 

Modo Descripción
r Solo lectura.
w Solo escritura. Creará un nuevo archivo si no se encuentra con el nombre especificado.
rb Solo lectura (binario).
wb Solo escritura (binario). Creará un nuevo archivo si no se encuentra con el nombre especificado.
r+ Para leer y escribir.
rb+ Para lectura y escritura (binario).
w+ Para leer y escribir. Creará un nuevo archivo grabable si no se encuentra con el nombre especificado.
wb+ Para lectura y escritura (binario). Creará un nuevo archivo grabable si no se encuentra con el nombre especificado.
a Se abre para agregar contenido nuevo. Creará un nuevo archivo grabable si no se encuentra con el nombre especificado.
a+ Se abre para agregar contenido nuevo. Creará un nuevo archivo para leer la entrada si no se encuentra con el nombre especificado.
ab Se abre para agregar nuevo contenido (binario). Creará un nuevo archivo grabable si no se encuentra con el nombre especificado.
ab+ Se abre para agregar nuevo contenido (binario). Creará un nuevo archivo para leer la entrada si no se encuentra con el nombre especificado.

Leer datos de un archivo

Al leer un archivo de texto, el flujo de bytes ingresa a la entrada del programa secuencialmente uno tras otro, por lo que el archivo proporciona acceso secuencial a los datos. Es decir, si necesitamos leer el décimo valor del archivo, primero debemos leer los 9 anteriores.

La lectura de una sola línea de un archivo permite que se ejecute el método readline(). Este método se llama en una variable de archivo. Aleta = abrir("entrada.txt") s = Fin.readline()
Se pueden aplicar varios métodos a la cadena de lectura, similares a los que se usan cuando se lee desde el teclado (split(), map(), etc.). Por ejemplo, si hay dos números separados por un espacio en una línea de un archivo, puede contarlos de la siguiente manera: Aleta = abrir("entrada.txt") s = Fin.readline().split() # dividir línea en espacios s = ["2007", "2021"] a, b = mapa(int, s)         # aplicar el método int() a todos los elementos de la lista s,   # es decir, convertir la cadena de caracteres en un número # a, b = int(s[0], s[1])   # esto es lo mismo que la línea de arriba # a, b = [int(x) for x in s] # igual que un generador
El método read() lee todo el contenido del archivo y devuelve una cadena que puede contener los caracteres '\n'. Si se pasa un parámetro entero al método read(), no se leerá más del número especificado de caracteres. Por ejemplo, puede leer un archivo byte a byte utilizando el método read(1).
.
Cuando se abre un archivo, el puntero que determina la ubicación actual en el archivo se establece al principio del archivo y, cuando se lee, se desplaza a la posición que sigue a la lectura de datos. Al escribir, el puntero se mueve a la siguiente posición libre.

Escribir datos en un archivo

El método write() se utiliza para escribir datos en un archivo. Los datos numéricos deben convertirse en una cadena. Esto se puede hacer con el método format() o con el método str().

 

Archivos de varias líneas

Al trabajar con archivos de varias líneas, debe saber cuándo se agotan los datos del archivo. Para hacer esto, puede usar la característica de los métodos readline(): si el cursor del archivo apunta al final del archivo, entonces el método readline() devuelve un cadena vacía, que se percibe como un valor booleano falso: mientras que es cierto:     s = fin.readline()     si no s: romper   # si se recibe una cadena vacía al leer una cadena,   # el ciclo termina con una declaración de ruptura     print(s, end="")  # desactivar nueva línea, porque al leer una línea de un archivo                       # carácter de nueva línea "\n" guardado

 

Otras formas de leer datos de archivos de varias líneas
1. Inmediatamente todos los datos de la lista. Aleta = abrir("entrada.txt") list_strings = Fin.readlines()    # leer todas las líneas a la vez Fin.cerrar() para s en list_strings:     imprimir(s, end="")
2. Usando la construcción with-as. En este caso, el archivo se cierra automáticamente después del final del ciclo. con open("input.txt") como Fin:     para s en aleta:         imprimir(s, end="") Esta construcción garantiza que el archivo esté cerrado. 


3. Una forma de iterar sobre cadenas al estilo del lenguaje Python (se recomienda usar este método). En este caso, el archivo también se cierra automáticamente. para s en abierto("entrada.txt"):     imprimir(s, final="")

Archivo cirílico

Si el archivo contiene letras rusas (cualquier carácter con un código superior a 127), debe especificar la codificación al abrir datos = abrir("entrada.txt", "r", codificación="utf-8")