Un archivo es información identificada con un nombre que puede ser almacenada de manera permanente en el directorio de un dispositivo.
Abrir archivo
Antes de poder realizar cualquier operación de lectura/escritura hay que abrir el archivo con open() indicando su ubicación y nombre seguido, opcionalmente, por el modo o tipo de operación a realizar y la codificación que tendrá el archivo. Si no se indica el tipo de operación el archivo se abrirá en modo de lectura y si se omite la codificación se utilizará la codificación actual del sistema. Si no existe la ruta del archivo o se intenta abrir para lectura un archivo inexistente se producirá una excepción del tipo IOerror.
ObjArchivo = open('/home/archivo.txt') ObjArchivo = open('/home/archivo.txt', 'r') ObjArchivo = open('/home/archivo.txt', mode='r', encoding='utf-8')
¿Y qué codificación utiliza nuestro sistema? Podemos averiguarlo ejecutando las siguientes líneas de código:
import locale print(locale.getpreferredencoding())
Las operaciones que pueden realizarse sobre un archivo:
r | Lectura |
r+ | Lectura/Escritura |
w | Sobreescritura. Si no existe archivo se creará |
a | Añadir. Escribe al final del archivo |
b | Binario |
+ | Permite lectura/escritura simultánea |
U | Salto de línea universal: win cr+lf, linux lf y mac cr |
rb | Lectura binaria |
wb | Sobreescritura binaria |
r+b | Lectura/Escritura binaria |
Cerrar archivo
Después de terminar de trabajar con un archivo lo cerraremos con el método close().
ObjArchivo.close()
Leer archivo: read, readline, readlines, with-as
Con el método read() es posible leer un número de bytes determinados. Si no se indica número se leerá todo lo que reste o si se alcanzó el final de fichero devolverá una cadena vacía.
# Abre archivo en modo lectura archivo = open('archivo.txt','r') # Lee los 9 primeros bytes cadena1 = archivo.read(9) # Lee la información restaste cadena2 = archivo.read() # Muestra la primera lectura print(cadena1) # Muestra la segunda lectura print(cadena2) # Cierra el archivo archivo.close()
El método readline() lee de un archivo una línea completa
# Abre archivo en modo lectura archivo = open('archivo.txt','r') # inicia bucle infinito para leer línea a línea while True: linea = archivo.readline() # lee línea if not linea: break # Si no hay más se rompe bucle print(linea) # Muestra la línea leída archivo.close() # Cierra archivo
El método readlines() lee todas las líneas de un archivo como una lista. Si se indica el parámetro de tamaño leerá esa cantidad de bytes del archivo y lo necesario hasta completar la última linea.
# Abre archivo en modo lectura archivo = open('archivo.txt','r') # Lee todas la líneas y asigna a lista lista = archivo.readlines() # Inicializa un contador numlin = 0 # Recorre todas los elementos de la lista for linea in lista: # incrementa en 1 el contador numlin += 1 # muestra contador y elemento (línea) print(numlin, linea) archivo.close() # cierra archivo
with-as permite usar los archivos de forma óptima cerrándolos y liberando la memoria al concluir el proceso de lectura.
# abre archivo (y cierra cuando termine lectura) with open("indice.txt") as fichero: # recorre línea a línea el archivo for linea in fichero: # muestra línea última leída print(linea)
Escribir en archivo: write, writelines
El método write() escribe una cadena y el método writelines() escribe una lista a un archivo. Si en el momento de escribir el archivo no existe se creará uno nuevo.
cadena1 = 'Datos' # declara cadena1 cadena2 = 'Secretos' # declara cadena2 # Abre archivo para escribir archivo = open('datos1.txt','w') # Escribe cadena1 añadiendo salto de línea archivo.write(cadena1 + '\n') # Escribe cadena2 en archivo archivo.write(cadena2) # cierra archivo archivo.close() # Declara lista lista = ['lunes', 'martes', 'miercoles', 'jueves', 'viernes'] # Abre archivo en modo escritura archivo = open('datos2.txt','w') # Escribe toda la lista en el archivo archivo.writelines(lista) # Cierra archivo archivo.close()
Mover el puntero: seek(), tell()
El método seek() desplaza el puntero a una posición del archivo y el método tell() devuelve la posición del puntero en un momento dado (en bytes).
# Abre archivo en modo lectura archivo = open('datos2.txt','r') # Mueve puntero al quinto byte archivo.seek(5) # lee los siguientes 5 bytes cadena1 = archivo.read(5) # Muestra cadena print(cadena1) # Muestra posición del puntero print(archivo.tell()) # Cierra archivo archivo.close()
Leer y escribir cualquier objeto a un archivo: pickle
Para leer y escribir cualquier tipo de objeto Python podemos importar el modulo pickle y usar sus métodos dump() y load() para leer y escribir los datos.
# Importa módulo pickle import pickle # Declara lista lista = ['Perl', 'Python', 'Ruby'] # Abre archivo binario para escribir archivo = open('lenguajes.dat', 'wb') # Escribe lista en archivo pickle.dump(lista, archivo) # Cierra archivo archivo.close() # Borra de memoria la lista del lista # Abre archivo binario para leer archivo = open('lenguajes.dat', 'rb') # carga lista desde archivo lista = pickle.load(archivo) # Muestra lista print(lista) # Cierra archivo archivo.close()
Relacionado: Tempfile: archivos y directorios temporales
Ir al índice del tutorial de Python