Autor
|
Tema: Ayuda python,eliminar lineas de un archivo una por una (Leído 5,454 veces)
|
Panic0
Desconectado
Mensajes: 218
|
Hola a todos,estoy tratando de hacer que cuando se imprima la linea de un archivo después la borre es decir linea 1 (se borra linea 1) linea 2 (se borra linea 2) Y así con todo el archivo Tengo esto de momento nom_archivo = "archivos_txt/testingfile.txt" archivo = open(nom_archivo, "r") lineas = archivo.readlines()
archivo.close() for i in lineas: print(i) input() archivo = open(nom_archivo,"w") for linea in lineas: if linea != lastline: archivo.write(i)
Pero no funciona
|
|
« Última modificación: 7 Marzo 2021, 21:29 pm por Panic0 »
|
En línea
|
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
|
|
|
Danielㅤ
|
Hola, pero eso que querés hacer es irrelevante!!! porque si vas imprimiendo por pantalla las líneas del archivo y después las borras, es decir imprimir una x línea y borrarla, para eso imprimis todas las líneas del archivo y después borras el archivo entero: archivo = open(nom_archivo, "w") archivo.write("") archivo.close() # Saludos
|
|
|
En línea
|
|
|
|
Panic0
Desconectado
Mensajes: 218
|
Hola, pero eso que querés hacer es irrelevante!!! porque si vas imprimiendo por pantalla las líneas del archivo y después las borras, es decir imprimir una x línea y borrarla, para eso imprimis todas las líneas del archivo y después borras el archivo entero: archivo = open(nom_archivo, "w") archivo.write("") archivo.close() # Saludos
Hola,ni tan irrelevante ya que ayer le hice un par de cambios y bueno quedo pero no del todo.
|
|
|
En línea
|
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
|
|
|
Danielㅤ
|
Estimado panico, según lo que entiendo de lo que querés hacer, es por ejemplo si un archivo contiene lo siguiente:
Lunes Martes Miércoles Jueves Viernes Sábado Domingo
Y vos querés imprimir el contenido y después de cada línea que imprimas la borras, entonces para eso mejor imprime todo el contenido y después borras el contenido del archivo entero, es lo más lógico, rápido y simple.
Saludos
|
|
|
En línea
|
|
|
|
Serapis
|
Tienes que sopesar cual tiene menor coste, lo que depende de: --- El tamaño del fichero. --- En qué punto del mismo se localice dicha línea. En resumen el tamaño del ficheor antes y después de dicha línea. Además, si no es la única línea a borrar, conviene retrasar la operación, almacenar los datos referentes a su localización y tamaño en alguna estructura de datos y cuando se tenga la info de todas las que se deseen 'borrar' proceder co el borrado de todas en una misma y única operación... porque borrar una sola línea de cada vez tiene un elevado coste.
Hay dos formas de hacer lo que quieres: 1 - Si la línea ocupa pongamos 40 bytes, bajas todos los que estén por encima de la línea exactamente 40 bytes, para cubrir el hueco que ocupaba dicha línea... y sobrescribes los 40 bytes finales del fichero a 'cero' (por ejemplo). El tamaño del fichero sigue siendo el mismo, luego operaciones de tipo 'append' escribirían al final de dicho fichero, sin considerar ese espacio de 40 bytes del final...
2 - El otro modo soluciona el problema antedicho, pero el coste es algo mayor, tanto mayor cuanto más grande sea el fichero y más al final este dicha 'linea 'borrada'.. Creas un fichero nuevo, copias todo el contenido hasta el comienzo de la línea a borrar, y luego todo el contenido tras la linea a borrar, en resumen copias todo excluyendo dicha línea. ...luego al terminar cierras y borras el fichero que contiene la línea que querías borrar., y al nuevo lo renombras con el nombre que tenía el ahora borrado. Por supuesto si has leído un fichero enteramente en un array de líneas, la operatoria se puede simplificar, cerrando y eliminando el fichero actual y creando uno nuevo del mismo nombre que el eliminado, ahora escribe todo el contenido que mantienes en tu array, omitiendo justamente las líneas que se quieran 'borrar'.
Los ficheros ocupan un espacio contínuo en el disco, luego el coste asociado con borrados en medio de un fichero tienen un elevado coste. Si el fichero mantiene algún tipo de estructura, registros, lo que se suele hacer es simplemente marcar un registro como 'vacío', el contenido del mismo no precisa ser tocado, salvo que contenga algo que por seguridad no pueda dejarse así, en cuyo caso se sobrescribe con contenido aleatorio...
Cuando deba añadirse nuevos registro, siempre lo harán en registros borrados con preferencia a añadirlos al final del fichero.
Si se acumulan demasiados registros sin borrar (cuand esté muy fragmentado), según el diseño... puede interesar 'defragmentar', haciendo exactamente lo que se señala en el apartado '2', copiando el contenido total del fichero a otro, excluyendo los registros vacios...
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Eliminar lineas en Blanco de un TXT
Programación C/C++
|
Jupiter34
|
7
|
10,191
|
29 Octubre 2012, 17:02 pm
por rir3760
|
|
|
Eliminar espacios lineas archivo de texto
Scripting
|
Shuffle66
|
7
|
8,383
|
18 Julio 2013, 11:48 am
por Shuffle66
|
|
|
Eliminar todo menos 100 líneas
Bases de Datos
|
dimitrix
|
4
|
3,160
|
7 Enero 2016, 14:20 pm
por Shell Root
|
|
|
Eliminar lineas archivo txt
Scripting
|
Wiliam678
|
8
|
3,291
|
15 Noviembre 2018, 14:14 pm
por Wiliam678
|
|
|
Problema con escribir lineas en un archivo [PYTHON] [SOLUCIONADO]
Scripting
|
Panic0
|
0
|
2,358
|
3 Octubre 2021, 03:27 am
por Panic0
|
|