Saltar a contenido
 No os perd谩is mi futuro contenido, seguidme en y Youtube 馃榿

Ficheros de texto

Hay varias formas de abrir un fichero, la m谩s com煤n es utilizando la funci贸n open del m贸dulo io.

Creaci贸n y escritura

Note

from io import open

texto = "Una l铆nea con texto\nOtra l铆nea con texto"

# Ruta donde crearemos el fichero, w indica escritura (puntero al principio)
fichero = open('fichero.txt','w')  

# Escribimos el texto
fichero.write(texto) 

# Cerramos el fichero
fichero.close()  

Lectura

Note

from io import open

# Ruta donde leeremos el fichero, r indica lectura (por defecto ya es r)
fichero = open('fichero.txt','r')  

# Lectura completa
texto = fichero.read() 

# Cerramos el fichero
fichero.close()  

print(texto)
Una l铆nea con texto
Otra l铆nea con texto

Podemos usar el m茅todo readlines() del fichero para generar una lista con las l铆neas:

Note

from io import open
fichero = open('fichero.txt','r')

# Leempos creando una lista de l铆neas
texto = fichero.readlines()

fichero.close()
print(texto)
['Una l铆nea con texto\n', 'Otra l铆nea con texto\n']

Tambi茅n se puede leer un fichero utilizando la instrucci贸n est谩ndar with de la siguiente forma:

Note

with open("fichero.txt", "r") as fichero:
    for linea in fichero:
        print(linea)
Una l铆nea con texto

Otra l铆nea con texto

Extensi贸n

Este modo nos permite a帽adir datos al final de un fichero:

Note

from io import open

# Ruta donde leeremos el fichero, a indica extensi贸n (puntero al final)
fichero = open('fichero.txt','a')  

fichero.write('\nOtra l铆nea m谩s abajo del todo')

fichero.close()

La variante 'a+' permite crear el fichero si no existe:

Note

fichero = open('fichero_inventado.txt','a+')

Manejando el puntero

Es posible posicioar el puntero en el fichero manualmente usando el m茅todo seek e indicando un n煤mero de caracteres para luego leer una cantidad de caracteres con el m茅todo read:

Note

fichero = open('fichero.txt','r')
fichero.seek(0)   # Puntero al principio
fichero.read(10)  # Leemos 10 car谩cteres
'Una l铆nea '

Para posicionar el puntero justo al inicio de la segunda l铆nea, podr铆amos ponerlo justo en la longitud de la primera:

Note

fichero = open('fichero.txt','r')
fichero.seek(0)

# Leemos la primera l铆nea y situamos el puntero al principio de la segunda
fichero.seek( len(fichero.readline()) )

# Leemos todo lo que queda del puntero hasta el final
fichero.read()
'\nOtra l铆nea con texto\nOtra l铆nea m谩s abajo del todo'

Lectura con escritura

Se puede abrir un fichero en modo lectura con escritura, pero 茅ste debe existir pr茅viamente. Adem谩s por defecto el puntero estar谩 al principio y si escribimos algo sobreescribiremos el contenido actual, as铆 que prestad atenci贸n a los saltos de l铆nea y caracteres especiales:

Note

# Creamos un fichero de prueba con 4 l铆neas
fichero = open('fichero2.txt','w')
texto = "L铆nea 1\nL铆nea 2\nL铆nea 3\nL铆nea 4"
fichero.write(texto)
fichero.close()

# Lo abrimos en lectura con escritura y escribimos algo
fichero = open('fichero2.txt','r+')
fichero.write("0123456")

# Volvemos a ponter el puntero al inicio y leemos hasta el final
fichero.seek(0)
fichero.read()
fichero.close()
'0123456\nL铆nea 2\nL铆nea 3\nL铆nea 4'

Modificar una l铆nea

Para lograr este fin lo mejor es leer todas las l铆neas en una lista, modificar la l铆nea en la lista, posicionar el puntero al principio y reescribir de nuevo todas las l铆neas:

Note

fichero = open('fichero2.txt','r+')
texto = fichero.readlines()

# Modificamos la l铆nea que queramos a partir del 铆ndice
texto[2] = "Esta es la l铆nea 3 modificada\n"

# Volvemos a ponter el puntero al inicio y reescribimos
fichero.seek(0)
fichero.writelines(texto)
fichero.close()

# Leemos el fichero de nuevo
with open("fichero2.txt", "r") as fichero:
    print(fichero.read())
0123456
L铆nea 2
Esta es la l铆nea 3 modificada
L铆nea 4

脷ltima edici贸n: 3 de Octubre de 2018