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