Python puede leer y escribir ficheros de texto o binarios.
Las palabras reservadas with y as se introdujeron en Python 2.6 (publicado en septiembre de 2006, aunque estaban disponibles en Python 2.5 en el módulo __future__) para facilitar, entre otros, la forma de trabajar con ficheros.
Su sintaxis general es la siguiente:
with EXPRESIÓN as VARIABLE: BLOQUE DE INSTRUCCIONES
En el caso de los ficheros, la expresión es una llamada a la función open() y la variable es la conexión con el fichero:
with open("FICHERO") as fichero: BLOQUE DE INSTRUCCIONES
La función open puede tener varios argumentos. Los más importantes son
with open("FICHERO", mode="MODO", encoding="CODIFICACIÓN") as fichero: BLOQUE DE INSTRUCCIONES
En estos apuntes se trabaja únicamente con ficheros de texto y se utiliza siempre el juego de caracteres UTF-8.
Si el sistema operativo utiliza de forma predeterminada el juego de caracteres UTF-8, no haría falta indicar el juego de caracteres al abrir el fichero. Para saber cuál es el juego de caracteres predeterminado se puede ejecutar en el entorno interactivo las instrucciones siguientes (en el ejemplo, el juego de caracteres es CP-1252, que utiliza Windows):
>>> import locale >>> print(locale.getpreferredencoding(False)) cp1512
De todas formas, aunque el juego de caracteres sea UTF-8, se recomienda indicar siempre explícitamente el juego de caracteres al abrir un fichero, ya que los programas escritos en un sistema operativo se pueden acabar ejecutando en otro.
Los modos de escritura son:
Se puede escribir en el fichero
La función print() añade un salto de línea al final de la cadena añadida al fichero, pero el método write no lo hace, por lo que habrá que añadirlo explícitamente.
Los ejemplos siguientes muestran la diferencia entre cada uno de los modos de escritura (usando la función print() o el método write):
ruta = "prueba.txt"
with open(ruta, mode="w", encoding="utf-8") as fichero:
print("Hola", file=fichero)
ruta = "prueba.txt"
with open(ruta, mode="w", encoding="utf-8") as fichero:
fichero.write("Hola\n")
ruta = "prueba.txt"
with open(ruta, mode="x", encoding="utf-8") as fichero:
print("Hola", file=fichero)
ruta = "prueba.txt"
with open(ruta, mode="x", encoding="utf-8") as fichero:
fichero.write("Hola\n")
ruta = "prueba.txt"
with open(ruta, mode="a", encoding="utf-8") as fichero:
print("Hola", file=fichero)
ruta = "prueba.txt"
with open(ruta, mode="a", encoding="utf-8") as fichero:
fichero.write("Hola\n")
Los modos de lectura son:
Faltan ejemplos de lectura y desplazamiento.
Se pueden abrir varios ficheros a la vez en una única construcción with ... mediante varias funciones open(...) as .... separadas con comas. Cada fichero se puede abrir en un modo distinto.
ruta_1 = "prueba_1.txt"
ruta_2 = "prueba_2.txt"
with open(ruta_1, mode="w", encoding="utf-8") as fichero_1, open(ruta_2, mode="w", encoding="utf-8") as fichero_2:
print("Hola", file=fichero_1)
print("Adios", file=fichero_2)