Python: Gestión de ficheros con Open

Formato:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

Modos disponibles:

Caracter Significado
'r' abre para lectura (por defecto)
'w' abre para escritura, borrando (truncando) el fichero primero
'x' abre para creación en exclusiva, si el fichero YA existe da error
'a' abre para escritura, añadiendo al final del fichero en caso de que exista
'b' modo binario
't' modo texto (por defecto)
'+' abre un fichero para actualizar (lectura y escritura)

Una vez que el fichero está abierto podemos usar diferentes métodos:

Lee al menos la cantidad de caracteres indicados por tamaño del fichero, por defecto (sin parámetros, valores negativos o None) lee el fichero completo hasta el final. Una vez leído el fichero por completo, si volvemos a ejecutar el método, obtendremos cadena vacía ''. Podemos ir al principio con el método seek.

In [1]: f = open("fichero.txt")

In [2]: print(f.read())
---contenido de fichero.txt---

Podemos usar .splitlines() para quitar el código de nueva línea y crear una lista con dada línea del fichero de texto:

In [1]: f = open("fichero.txt")

In [2]: print(f.read().splitlines())
['linea1', 'lineas2', ....]

Cambia la posición del flujo (punto dentro del fichero) al desplazamiento indicado. El comportamiento depende de desde_donde:

  • SEEK_SET o 0: busca desde el principio del fichero (stream) (por defecto); desplazamiento debe ser un número devuelto por TextIOBase.tell(), o cero (que situa el puntero al principio del fichero). Cualquier otro valor produce un comportamiento indefinido.
  • SEEK_CUR o 1: “seek” to the current position; desplazamiento debe ser cero, que es no-hace-nada.
  • SEEK_END o 2: seek to the end of the stream; desplazamiento debe ser cero.
In [1]: f = open("fichero.txt")

In [2]: print(f.read())
---contenido de fichero.txt---

In [3]: print(f.read())


In [4]: f.seek(0)
In [4]: 0

In [5]: print(f.read())
---contenido de fichero.txt---

Lee hasta nueva lines ( ) o final de fichero (EOF) y devuelve una cadena (str). Una vez leído el fichero por completo, si volvemos a ejecutar el método, obtendremos cadena vacía ''. Podemos ir al principio con el método seek.

Si se especifica tamaño, se leen al menos la cantidad de caracteres indicados.

In [1]: f = open("fichero.txt")

In [2]: print(f.readline())
---primera linea de fichero.txt---

In [3]: print(f.readline())
---segunda linea de fichero.txt---

In [4]: print(f.readline())
---tercera linea de fichero.txt---
Importante
cada línea incluye al final ' ' (newline).

Lee el fichero linea por linea y devuelve una lista con cada linea como elementos. Se puede especificar hint para controlar el número de líneas a leer.

In [1]: f = open("fichero.txt")

In [2]: print(f.readlines())
['linea 1
', 'linea 2
', lines 3
']
Importante
cada línea incluye al final ' ' (newline).

Escribe en el fichero de texto la cadena indicada. El fichero ha tenido que abrirse con modo de escritura. Devuelve el número de caracteres que ha escrito.

Importante
El contenido del fichero NO se verá reflejado en el sistema hasta que se cierre el fichero con .close() o se haga .flush().
In [1]: f = open("fichero.txt", mode="w")

In [2]: f.write("cadena de texto
")
16

In [3]: variable = "otra cadena"


In [4]: f.seek(0)
In [4]: 0

In [5]: print(f.read())
---contenido de fichero.txt---

Vacía los buffers si hay algo que vaciar.

Vacía los buffers y cierra el fichero si no estaba ya cerrado.

Para vaciar un fichero de texto (en principio cualquier tipo) podemos usar lo siguiente:

open('fichero', 'w').close()

Esto emula el comando unix > fichero.


Más información en: función open()

Retro

Lugares

Redes

Sistemas

Varios