English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Un archivo es una ubicación nombrada en el disco que se utiliza para almacenar información relacionada. Se utiliza para almacenar datos de manera permanente en almacenamiento no volátil (como un disco duro).
Dado que la memoria de acceso aleatorio (RAM) es volátil, cuando se apaga la computadora se pierde sus datos, por lo tanto, utilizamos archivos para el uso de datos futuros.
Cuando queremos leer o escribir en un archivo, primero debemos abrirlo. Después de completar, debemos cerrarlo para liberar los recursos asociados con el archivo.
Por lo tanto, en Python, las operaciones de archivo se realizan en el siguiente orden.
Abrir el archivo
Lectura o escritura (ejecutar la operación)
Cerrar el archivo
Python tiene una función integrada open() para abrir archivos. Esta función devuelve un objeto de archivo, también conocido como puntero, ya que se utiliza para leer o modificar el archivo de manera correspondiente.
>>> f = open("test.txt") # Abrir el archivo en el directorio actual >>> f = open("C:/Python33/README.txt") # Especificar la ruta completa
Podemos especificar el modo al abrir el archivo. En el modo, especificamos si queremos leer 'r', escribir 'w' o agregar 'a' al archivo. También especificamos si queremos abrir el archivo en modo texto o binario.
La configuración predeterminada es leer en modo texto. En este modo, cuando leemos de un archivo, obtenemos una cadena.
Por otro lado, el modo binario devuelve bytes, que es el modo a usar para procesar archivos no de texto (como imágenes o archivos exe).
Modo | Descripción |
---|---|
'r' | Abrir el archivo para leer. (Por defecto) |
'w' | Abrir el archivo para escribir. Si no existe, se crea un nuevo archivo, o si existe, se truncará. |
'x' | Abrir el archivo para crear de manera exclusiva. Si el archivo ya existe, la operación falla. |
'a' | Abrir el archivo para agregar al final sin truncar. Si no existe, se crea un nuevo archivo. |
't' | Abrir en modo texto. (Por defecto) |
'b' | Abrir en modo binario. |
'+' | Abrir el archivo para actualizar (lectura y escritura) |
f = open("test.txt") # Equivalente a "r" o "rt" f = open("test.txt",'w') # Escribir en modo texto f = open("img.bmp",'r+b') # Leer y escribir en modo binario
A diferencia de otros idiomas, el carácter 'a' no sugiere un número antes de ser codificado en ASCII (u otro código de equivalencia)97 .
Además, la codificación predeterminada depende de la plataforma. En Windows, 'cp'1252'pero 'utf-8'en Linux.
Por lo tanto, tampoco podemos depender de la codificación predeterminada, de lo contrario, el comportamiento de nuestro código podría variar en diferentes plataformas.
Por lo tanto, al manejar archivos en modo de texto, se recomienda encarecidamente especificar el tipo de codificación.
f = open("test.txt",mode='r',encoding='utf-8)
Después de completar las operaciones del archivo, necesitamos cerrar el archivo correctamente.
Cerrar el archivo liberará los recursos asociados con él y se realiza mediante el método close().
Python tiene un recolector de basura para limpiar objetos no referenciados, pero, no podemos depender de él para cerrar archivos.
f = open("test.txt",encoding='utf-8) # Ejecutar operaciones de archivo f.close()
Este método no es completamente seguro. Si se lanza una excepción mientras se realizan ciertas operaciones en el archivo, el código saldrá sin cerrar el archivo.
Una manera más segura es usartry ... finallybloque.
try: f = open("test.txt",encoding='utf-8) # Ejecutar operaciones de archivo finally: f.close()
De esta manera, podemos garantizar que el archivo se cierre correctamente incluso si se lanza una excepción, lo que detiene el flujo del programa.
El mejor método es usar la declaración with. Esto asegura que el archivo se cierre cuando se salga del bloque interno.
No necesitamos llamar explícitamente al método close(). Se realiza internamente.
with open("test.txt",encoding='utf-8') as f: # Ejecutar operaciones de archivo
Para escribir en un archivo con Python, podemos escribir en modo 'w', agregar en modo 'a' o crear de manera exclusiva en modo 'x'.
Debemos usar con cautela el modo 'w', ya que sobrescribe el archivo (si ya existe). Todos los datos anteriores se eliminarán.
La escritura de cadenas o secuencias de bytes (para archivos binarios) se realiza mediante el método write(). Este método devuelve el número de caracteres escritos en el archivo.
with open("test.txt",'w',encoding='utf-8') as f: f.write("my first file\n") f.write("This file\n\n") f.write("contains three lines\n")
Si 'test.txt' no existe, el programa creará un archivo nuevo llamado. Si ya existe, lo sobrescribirá.
Debemos incluir nosotros mismos los saltos de línea para distinguir diferentes filas.
Para leer un archivo con Python, debemos abrir el archivo en modo de lectura.
hay varios métodos disponibles para este propósito. Podemos usar el método read(size) para leertamañodatos. Si no se especificatamañoparámetros, que leerá y devolverá hasta el final del archivo.
>>> f = open("test.txt",'r',encoding = 'utf-8) >>> f.read(4) # Leer lo anterior4datos 'Este' >>> f.read(4) # Leer lo siguiente4datos 'es' >>> f.read() # Leer el resto hasta el final del archivo 'mi primer archivo\nEste archivo\ncontiene tres líneas\n' >>> f.read() # Leer más y devolver una cadena vacía
Podemos ver que el método read() devuelve el carácter de nueva línea '\n'. Después de alcanzar el final del archivo, obtendremos una cadena vacía al intentar leer más.
Podemos usar el método seek() para cambiar el cursor actual del archivo (posición). Del mismo modo, el método tell() devuelve nuestra posición actual (en número de bytes).
>>> f.tell() # Obtener la posición actual del archivo 56 >>> f.seek(0) # Mover el cursor del archivo a la posición inicial 0 >>> print(f.read()) # Leer todo el archivo Esto es mi primer archivo Este archivo contiene tres líneas
Podemos usarbucle forLeer línea por línea el archivo. Esto es eficiente y rápido.
>>> for line in f: ... print(line, end = '') ... Esto es mi primer archivo Este archivo contiene tres líneas
Las líneas del archivo en sí tienen el carácter de nueva línea '\n'.
Además, el parámetro final de print() evita dos saltos de línea al imprimir.
O, podemos usar el método readline() para leer las líneas individuales del archivo. Este método lee el archivo hasta el carácter de nueva línea, incluyendo el carácter de nueva línea.
>>> f.readline() 'Esto es mi primer archivo\n' >>> f.readline() 'Este archivo\n' >>> f.readline() 'contiene tres líneas\n' >>> f.readline()
Finalmente, el método readlines() devuelve una lista de las líneas restantes del archivo. Cuando se alcanza el final del archivo (EOF), todos estos métodos de lectura devolverán un valor vacío.
>>> f.readlines() ['Esto es mi primer archivo\n', 'Este archivo\n', 'contiene tres líneas\n']
Los objetos de archivo tienen varios métodos disponibles. Algunos se han utilizado en los ejemplos anteriores.
Esta es la lista completa de métodos en modo texto, con una breve descripción.
close() | Cerrar el archivo. |
detach() | Retorna el flujo original separado del búfer (flujo original). |
fileno() | Retorna el número representativo del flujo desde el punto de vista del sistema operativo. |
flush() | Refrescar el búfer interno. |
isatty() | Retorna si el flujo de archivo es interactivo. |
read() | Retorna el contenido del archivo. |
readable() | Retorna si es posible leer el flujo de archivo. |
readline() | Retorna una línea en el archivo. |
readlines() | Retorna una lista de líneas en el archivo. |
seek() | Cambiar la posición del archivo. |
seekable() | Retorna si el archivo permite cambiar la posición del archivo. |
tell() | Retorna la posición actual del archivo. |
truncate() | Ajustar el archivo al tamaño especificado. |
writeable() | Retorna si es posible escribir en el archivo. |
write() | Escribir una cadena específica en un archivo. |
writelines() | Escribir una lista de cadenas en un archivo. |