una txt texto sobrescribir linea leer especifica escribir eliminar elemento datos como borrar archivos archivo python file-io seek

txt - Cómo eliminar solo el contenido del archivo en python



leer una linea especifica de un archivo en python (4)

Cómo eliminar solo el contenido del archivo en python

Hay varias formas de establecer el tamaño lógico de un archivo en 0, dependiendo de cómo acceda a ese archivo:

Para vaciar un archivo abierto:

def deleteContent(pfile): pfile.seek(0) pfile.truncate()

Para vaciar un archivo abierto cuyo descriptor de archivo se conoce:

def deleteContent(fd): os.ftruncate(fd, 0) os.lseek(fd, 0, os.SEEK_SET)

Para vaciar un archivo cerrado (cuyo nombre se conoce)

def deleteContent(fName): with open(fName, "w"): pass

Tengo un archivo temporal con algún contenido [...] Necesito reutilizar ese archivo

Dicho esto, en el caso general , probablemente no sea eficiente ni deseable reutilizar un archivo temporal. A menos que tenga necesidades muy específicas, debe pensar en usar tempfile.TemporaryFile y un administrador de contexto para crear, usar y borrar de manera casi transparente sus archivos temporales:

import tempfile with tempfile.TemporaryFile() as temp: # do whatever you want with `temp` # <- `tempfile` guarantees the file being both closed *and* deleted # on exit of the context manager

Tengo un archivo temporal con cierto contenido y un script de python que genera algún resultado para este archivo. Quiero que esto se repita N veces, así que necesito reutilizar ese archivo (en realidad una matriz de archivos). Estoy borrando todo el contenido, por lo que el archivo temporal estará vacío en el próximo ciclo. Para borrar contenido, uso este código:

def deleteContent(pfile): pfile.seek(0) pfile.truncate() pfile.seek(0) # I believe this seek is redundant return pfile tempFile=deleteContent(tempFile)

Mi pregunta es: ¿hay alguna otra forma (mejor, más corta o más segura) de eliminar todo el contenido sin eliminar realmente el archivo temporal del disco?

Algo como tempFile.truncateAll() ?


¿Qué podría ser más fácil que algo como esto?

import tempfile for i in range(400): with tempfile.TemporaryFile() as tf: for j in range(1000): tf.write(''Line {} of file {}''.format(j,i))

Eso crea 400 archivos temporales y escribe 1000 líneas en cada archivo temporal. Se ejecuta en menos de 1/2 segundo en mi máquina sin complicaciones. Cada archivo temporal del total se crea y borra a medida que el administrador de contexto se abre y se cierra en este caso. Es rápido, seguro y multiplataforma.

Usar tempfile es mucho mejor que tratar de reinventarlo.


Creo que lo más fácil es simplemente abrir el archivo en modo de escritura y luego cerrarlo. Por ejemplo, si su archivo myfile.dat contiene:

"This is the original content"

Entonces simplemente puedes escribir:

f = open(''myfile.dat'', ''w'') f.close()

Esto borrará todo el contenido. Luego puedes escribir el nuevo contenido en el archivo:

f = open(''myfile.dat'', ''w'') f.write(''This is the new content!'') f.close()


Puedes hacerlo:

def deleteContent(pfile): fn=pfile.name pfile.close() return open(fn,''w'')