38 votos

Borrar una línea específica en un archivo (Python)

Digamos que tengo un archivo de texto lleno de apodos, ¿cómo puedo borrar un apodo específico de ese archivo?

76voto

houbysoft Puntos 9773

Asumiendo que tu archivo tiene el formato de un apodo por línea, usa esto.

Primero, abre el archivo:

f = open("yourfile.txt","r")

A continuación, toma todas tus líneas del archivo:

lines = f.readlines()

Ahora puedes cerrar el archivo:

f.close()

Y reabrirlo en modo de escritura:

f = open("yourfile.txt","w")

Entonces, vuelve a escribir tus líneas, excepto la línea que quieres borrar. Puede que quieras cambiar el "\n" a cualquier línea de terminación que use tu archivo.

for line in lines:
  if line!="nickname_to_delete"+"\n":
    f.write(line)

Al final, cierra el archivo de nuevo.

f.close()

2voto

Kingz Puntos 351

El problema de leer líneas en la primera pasada y hacer cambios (borrar líneas específicas) en la segunda pasada es que si el tamaño de los archivos es enorme, se agotará la memoria RAM. En cambio, un mejor enfoque es leer las líneas, una por una, y escribirlas en un archivo separado, eliminando las que no necesitas. He ejecutado este enfoque con archivos tan grandes como 12-50 GB, y el uso de la RAM permanece casi constante. Sólo los ciclos de la CPU muestran el procesamiento en curso.

1voto

Hugh Bothwell Puntos 22635

En general, no se puede; hay que volver a escribir todo el archivo (al menos desde el punto de cambio hasta el final).

En algunos casos específicos puedes hacerlo mejor que esto -

si todos sus elementos de datos son de la misma longitud y sin un orden específico, y conoce el desplazamiento del que quiere deshacerse, podría copiar el último elemento sobre el que se va a borrar y truncar el archivo antes del último elemento;

o podrías simplemente sobreescribir el trozo de datos con un valor de "este es un dato malo, sáltatelo" o mantener una bandera de "este elemento ha sido borrado" en tus elementos de datos guardados, de tal manera que puedas marcarlo como borrado sin modificar el archivo de otra manera.

Esto es probablemente una exageración para documentos cortos (¿algo menos de 100 KB?).

-1voto

Nikhil Puntos 104

Tome el contenido del archivo, divídalo por línea nueva en una tupla. Luego, accede al número de línea de tu tupla, une tu tupla resultante y sobreescribe al archivo.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X