elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Ayuda python,eliminar lineas de un archivo una por una
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda python,eliminar lineas de un archivo una por una  (Leído 4,788 veces)
Panic0

Desconectado Desconectado

Mensajes: 218



Ver Perfil
Ayuda python,eliminar lineas de un archivo una por una
« en: 7 Marzo 2021, 21:16 pm »

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
Código:
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  :P ;-)


« Ú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ㅤ


Desconectado Desconectado

Mensajes: 1.676


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Ayuda python,eliminar lineas de un archivo una por una
« Respuesta #1 en: 8 Marzo 2021, 00:26 am »

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:

Código
  1. archivo = open(nom_archivo, "w")
  2. archivo.write("")
  3. archivo.close()
  4.  
  5.  
  6. # Saludos


En línea

Panic0

Desconectado Desconectado

Mensajes: 218



Ver Perfil
Re: Ayuda python,eliminar lineas de un archivo una por una
« Respuesta #2 en: 8 Marzo 2021, 22:32 pm »

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:

Código
  1. archivo = open(nom_archivo, "w")
  2. archivo.write("")
  3. archivo.close()
  4.  
  5.  
  6. # 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ㅤ


Desconectado Desconectado

Mensajes: 1.676


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Ayuda python,eliminar lineas de un archivo una por una
« Respuesta #3 en: 8 Marzo 2021, 22:42 pm »

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
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Ayuda python,eliminar lineas de un archivo una por una
« Respuesta #4 en: 8 Marzo 2021, 23:49 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Eliminar lineas en Blanco de un TXT
Programación C/C++
Jupiter34 7 9,720 Último mensaje 29 Octubre 2012, 17:02 pm
por rir3760
Eliminar espacios lineas archivo de texto
Scripting
Shuffle66 7 7,907 Último mensaje 18 Julio 2013, 11:48 am
por Shuffle66
Eliminar todo menos 100 líneas
Bases de Datos
dimitrix 4 2,920 Último mensaje 7 Enero 2016, 14:20 pm
por Shell Root
Eliminar lineas archivo txt
Scripting
Wiliam678 8 2,857 Último mensaje 15 Noviembre 2018, 14:14 pm
por Wiliam678
Problema con escribir lineas en un archivo [PYTHON] [SOLUCIONADO]
Scripting
Panic0 0 2,048 Último mensaje 3 Octubre 2021, 03:27 am
por Panic0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines