2010-05-04 266 views
42

Tengo un archivo de texto que quiero borrar en Python. ¿Cómo puedo hacer eso?¿Cómo borrar el contenido del archivo de texto en Python?

+2

Python _and_ C++? ¿Por qué? Puedes hacerlo en uno y puedes hacerlo en el otro, pero dada la elección, será mucho más fácil con Python. – wilhelmtell

+0

las personas que han dado las respuestas han dicho que no es posible ... ¿así que quieres decirme cómo hacerlo fácilmente en Python? – Hick

Respuesta

118

en Python:

open('file.txt', 'w').close() 

O, alternativamente, si ya tiene un archivo abierto:

f = open('file.txt', 'r+') 
f.truncate() 

En C++, podría utilizar algo similar.

+0

'#include ' y luego 'std :: ofstream (" file.txt ");' about tan corto como en Python. :) – wilhelmtell

+4

el motivo por el que funciona (tanto en C++ como en python) se debe a que, por defecto, cuando abre un archivo para escribir, trunca los contenidos existentes. Entonces realmente es un efecto secundario, por lo que preferiría la llamada explícita a truncar() por razones de claridad, aunque no sea necesario. – rmeador

+6

+1 para "si ya tiene un archivo abierto" – lajarre

0

Como los archivos de texto son secuenciales, no puede borrar datos directamente en ellos. Sus opciones son:

  • La forma más común es crear un archivo nuevo. Lea desde el archivo original y escriba todo en el nuevo archivo, excepto la parte que desea borrar. Cuando se haya escrito todo el archivo, elimine el archivo anterior y cambie el nombre del nuevo archivo para que tenga el nombre original.
  • También puede truncar y volver a escribir el archivo completo desde el punto que desea cambiar en adelante. Busque indicar que desea cambiar y lea el resto del archivo en la memoria. Busque el mismo punto, trunque el archivo y vuelva a escribir el contenido sin la parte que desea borrar.
  • Otra opción simple es sobrescribir los datos con otros datos de la misma longitud. Para eso, busque la posición exacta y escriba los datos nuevos. La limitación es que debe tener la misma longitud exacta.

Mire la función/método seek/truncate para implementar cualquiera de las ideas anteriores. Tanto Python como C tienen esas funciones.

+0

solo quiero borrar todo el archivo desde el comienzo – Hick

+2

Luego simplemente elimine el archivo. Use 'os.remove' o' os.unlink' en python, o 'unlink' en C. Otra opción es simplemente reabrir el archivo para escribir o usar' truncado'. – nosklo

0

No puede "borrar" de un archivo en el lugar a menos que necesite borrar el final. O bien contente con una sobrescritura de un valor "vacío", o lea las partes del archivo que le interesan y escríbalo en otro archivo.

+0

bien cómo sobrescribirlo sin dar un valor de basura? Quiero decir supongamos que hay una longitud de cadena de 9 y estoy sobreescribiendo con una longitud de cadena de 6. eso significaría 3 valores de basura rt? – Hick

+0

Correcto. Además, debería tener alguna forma de identificar a cualquier lector el hecho de que esos 3 caracteres son basura. –

+0

el hecho es que mi código se extiende entre python y C++. así que si una lectura de archivo se hace en C++ y un archivo escribe en python ... tanto el tiempo que se debe borrar el archivo ... – Hick

6
open("filename","w").close() 
+0

¡Es perfecto, es exactamente lo que está buscando mekasperasky! – Natim

1

Asignar el puntero al nulo dentro de su programa simplemente eliminará esa referencia al archivo. El archivo sigue ahí. Creo que la función remove() en el c stdio.h es lo que está buscando allí. No estoy seguro acerca de Python.

+1

Alternativamente use unlink() en unistd.h. – Void

+2

BTW, tanto remove() como unlink() disminuirán el recuento de referencias en un archivo normal, en realidad no lo borrarán. El archivo se borrará una vez que el recuento de referencias se reduzca a cero. Por ejemplo, si su proceso tiene el archivo abierto y llama a desvincular() o eliminar() en él, no se eliminará hasta que el archivo esté cerca() d (es decir, el recuento de ref se reduce a cero; también asume que no hay otros procesos) tener el archivo abierto). Este comportamiento es útil, por ejemplo, para asegurar que los archivos temporales no queden después de la terminación anormal del proceso (por ejemplo, abrir(), desvincular(), realizar el archivo IO, ** CRASH **, cerrar() NO llamado). – Void

6

Tiene que sobrescribir el archivo. En C++:

#include <fstream> 

std::ofstream("test.txt", std::ios::out).close(); 
+0

Esto es bueno para C++ :) – Natim

+1

No hay necesidad de la llamada 'close()'. El destructor cerrará el archivo. Entonces solo necesitas crear un temporal: 'ofstream (" test.txt ");' – wilhelmtell

+0

Estaba tan confundido hasta que me di cuenta de que la pregunta original se hacía sobre esto tanto en Python como en C++. – user1717828

21

No es una respuesta completa más de una extensión de la respuesta de Ondra

Al utilizar truncate() (mi método preferido) asegurarse de que el cursor se encuentre en la posición requerida. Cuando se abre un nuevo archivo para lectura: open('FILE_NAME','r'), su cursor está en 0 de forma predeterminada. Pero si ha analizado el archivo dentro de su código, asegúrese de señalar al principio del archivo nuevamente, es decir truncate(0) De forma predeterminada, truncate() trunca el contenido de un archivo comenzando desde la posición actual de cusror.

A simple example

3

De @jamylak usuario una forma alternativa de open("filename","w").close() es

with open('filename.txt','w'): pass 
1

Al utilizar with open("myfile.txt", "r+") as my_file:, llego ceros extraños en myfile.txt, sobre todo porque yo estoy leyendo el archivo primero. Para que funcione, primero tuve que cambiar el puntero de my_file al comienzo del archivo con my_file.seek(0). Entonces podría hacer my_file.truncate() para borrar el archivo.

Cuestiones relacionadas