Lectura y Escritura de ficheros en Python, con ejemplos


El proyecto de este post lo puedes descargar pulsando AQUI.

En este tutorial vamos a ver como leer y escribir fichero en Python, dado que es una de las cosas que suele ser muy util y utilizada a la hora de programar. Aunque la lectura y escritura de ficheros se puede hacer de varias formas, en este tutorial os vamos a dar el código necesario para realizar estas acciones.

Antes de pasar a explicar y a mostrar ejemplos de lectura y escritura, mostramos en la siguiente imagen un diagrama para ver los modos de lectura y escritura en python:

IO_Python_Jarroba

Lectura de Ficheros:

Vamos en primer lugar a leer el contenido del siguiente fichero (llamado 'fichero_leer.txt') e imprimir por pantalla lo que leemos:

Linea 1
Linea 2
Linea 3
Linea 4
Linea 5
Linea 6
Linea 7
Linea 8
Linea 9
Linea 10

En primer lugar tenemos que decir la ruta o directorio donde se encuentra el fichero que queremos leer, especificando la ruta donde se encuentra el fichero (ejem -> Windows: c:\\carpeta\……\fichero.txt,  Linux o Unix: \var\www\……\fichero.txt). 

dirFichero = './fichero_leer.txt'

Dado que estamos ejecutando este código en un sistema operativo Unix, estamos indicando con el símbolo '.' que el fichero se encuentra en la misma carpeta que el fichero python que estamos ejecutando, pero podíamos poner perfectamente la ruta absoluta para referenciar a este fichero.

Una vez que tenemos el fichero que queremos leer, abrimos el mismo en modo lectura ('r') y con un bucle 'for', vamos leyendo linea a linea el fichero y lo imprimimos por pantalla:

dirFichero = './fichero_leer.txt'
with open(dirFichero, 'r') as reader:
    for line in reader:
        print line

Siguiendo el diagrama de la primera imagen, queríamos leer el fichero desde el principio y por tanto hemos elegido la opción 'r', pero podíamos haber elegido también la opción 'r+' para leer el fichero desde el principio y sin borrar su contenido.

Por otro lado podemos también empezar a leer el fichero desde una posición concreta (o desde un byte concreto). Esto lo hacemos indicando con el métod 'seek(byte)' desde el byte que queremos empezar a leer. Veamos un ejemplo de ello, empezando a leer el fichero desde el byte 32, que correspondería comenzar a leer el fichero desde la linea 5:

with open(dirFichero, 'r') as reader:
    reader.seek(32)
    for line in reader:
        print line

Como resultado se imprimiría por pantalla lo siguiente:

Linea 5
Linea 6
Linea 7
Linea 8
Linea 9
Linea 10

Por último vamos a mostrar la opción 'w+' que tras leer el fichero borra su contenido. Esto se haría de la siguiente manera, pasandole como opción 'w+'

with open(dirFichero, 'w+') as reader:
    for line in reader:
        print line

Escritura de Ficheros:

Para la escritura de un fichero, vamos a poner un ejemplo en el que vamos a escribir cada elemento de una lista en una linea. Para ello abriremos un fichero con la opción 'w' (si existe el fichero borra su contenido y si no existe lo crea) y con el método 'write()' escribiremos el contenido que le pasemos como parámetro. Esto lo hacemos de la siguiente forma:

# Lista con las lineas a escribir en el fichero
lineas = ['Uno', 'Dos', 'Tres', 'Cuatro', 'Cinco', 'Seis', '...']

dirFichero = './fichero_escribir.txt'
fichero = open(dirFichero, 'w')
for l in lineas:
    fichero.write(l + '\n')
fichero.close()

Como resultado vamos a tener un fichero con el siguiente contenido:

Uno
Dos
Tres
Cuatro
Cinco
Seis
...

Por otra parte si lo que queremos es continuar escribiendo en el fichero sin borrar su contenido, debemos de aplicar la opción 'a+' que se posiciona al final del fichero sin borrar su contenido y en este caso empieza a escribir contenido a partir de esa posición:

# Lista con las lineas a escribir en el fichero
lineas = ['Uno', 'Dos', 'Tres', 'Cuatro', 'Cinco', 'Seis', '...']

dirFichero = './fichero_escribir.txt'
# Escribo en el fichero el contenido de la lista, sin borrar el contenido del fichero
fichero = open(dirFichero, 'a+')
for l in lineas:
    fichero.write(l + '\n')
fichero.close()

Como resultado, tenemos un fichero cuyo contenido es el contenido que había anteriormente (el contenido de la lista) más el nuevo contenido que hemos escrito que es la misma lista:

Uno
Dos
Tres
Cuatro
Cinco
Seis
...
Uno
Dos
Tres
Cuatro
Cinco
Seis
...
Comparte esta entrada en:
Safe Creative #1401310112503
Lectura y Escritura de ficheros en Python, con ejemplos por "www.jarroba.com" esta bajo una licencia Creative Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Creado a partir de la obra en www.jarroba.com

8 thoughts on “Lectura y Escritura de ficheros en Python, con ejemplos”

    1. Buenas Luis.
      Si estás siguiendo el artículo, no se te tiene que borrar, ya que es solo lectura y escritura de ficheros. Si se te está borrando es porque en algún lugar del código se está invocando a:

      os.remove()
      

      O a:

      pathlib.Path.unlink()
      
  1. Realizar una clase de prueba que lea líneas de dos ficheros y las imprima en orden en
    pantalla. Ejemplo, si el primer fichero tiene dos líneas «A» y «B» y el segundo fichero
    contiene dos líneas «C» y «D», debe imprimir «A», «B», «C» y «D». La solución debe utilizar
    internamente una cola.

    1. El tratamiento de los ficheros en Python es de una sola escritura, pudiendo añadir más datos al final del mismo. Para eliminar un dato intermedio existen varios acercamientos:
      -Crear otro fichero nuevo (o sobrescribir el mismo fichero que leemos), recorrer el antiguo para copiar su contenido y saltarnos los datos «eliminados» al momento de escribirlos. Esta aproximación para fichero grandes puede ser poco viable si cada vez que queramos borrar algo tenemos que volver a crear el fichero, pues tardaría bastante.
      -Utilizar un fichero intermediario (de indexación) para el marcado de los datos borrados (y a la hora de leer el fichero con todos los datos nos saltaríamos los datos que están marcados como borrados en este fichero intermedio). Para facilitar esto podemos utilizar el objeto Shelve () que ya lo implementa y que actúa como un diccionario pero en disco, permite modificar y borrar datos (aunque realmente los marca como borrados, pues los datos borrados siguen ocupando espacio aunque no los devolverá cuando pidamos alguno de los borrados). El problema de esta aproximación es que de vez en cuando necesitaremos tener que «desfragmentar» el fichero, pues los datos borrados ocupan sitio, con lo que podremos utilizar de vez en cuando el punto primero para «desfragmentar» (crear otro fichero sin los datos borrados, que ocupará bastante menos).
      -Y otra manera que me gusta menos por lo poco óptimo que es, si la información guardada tiene algún tipo de campo id, podremos escribir dicho registro con el mismo id al final del fichero; aquí lo único que tendríamos que hacer es quedarnos con el último id que sería el más actual (tendríamos que leer todo el fichero en memoria y quedarnos con el último registro que pertenezca a un mismo id); y si el último registro para el mismo id tuviera una «marca de borrado», entonces no lo devolveríamos. Esta aproximación tiene el mismo problema que el punto anterior, habría que «desfragmentar» el fichero de vez en cuando.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies