Come cancellare il contenuto del file di testo in Python?


140

Ho un file di testo che voglio cancellare in Python. Come lo faccio?


le persone che hanno dato le risposte hanno detto che non è possibile .. quindi vuoi dirmi come farlo facilmente in Python?
Hick,

Risposte:


280

In pitone:

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

O in alternativa, se hai già un file aperto:

f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+

In C ++, potresti usare qualcosa di simile.


#include<fstream>e poi std::ofstream("file.txt");circa quanto in Python. :)
Wilhelmtell,

8
il motivo per cui funziona (sia in C ++ che in python) è perché di default quando si apre un file per la scrittura, tronca il contenuto esistente. Quindi è davvero un effetto collaterale, e quindi preferirei la chiamata esplicita a truncate () per motivi di chiarezza, anche se non è necessario.
rmeador,

7
se hai aperto il file usando "r +", usa truncate (0) se hai un file analizzato, che probabilmente hai. Aggiungi questo alla risposta sopra per averlo completato!
Johan Engblom,

3
usa f.seek (0) per spostare il puntatore all'inizio del file
Johan Engblom,

Stavo leggendo e scrivendo su file. La risposta tronca perfettamente il file, ma attenzione se si desidera riscrivere qualcosa al suo interno, non dimenticare di aggiungere f.seek(0)dopo f.truncate(0), altrimenti si avrà uno strano \ x00 aggiunto all'inizio del file.
Krishna Chaitanya,

29

Non una risposta completa più di un'estensione alla risposta di ondra

Quando usi truncate()(il mio metodo preferito) assicurati che il cursore sia nella posizione richiesta. Quando viene aperto un nuovo file per la lettura open('FILE_NAME','r'), il cursore si trova su 0 per impostazione predefinita. Ma se hai analizzato il file all'interno del tuo codice, assicurati di puntare di nuovo all'inizio del file, ovvero truncate(0) per impostazione predefinita truncate()tronca il contenuto di un file a partire dalla posizione corrente dell'errore.

Un semplice esempio


22

L'apertura di un file in modalità "scrittura" lo cancella, non è necessario specificarlo:

open("filename", "w").close()

(dovresti chiuderlo poiché i tempi di chiusura automatica del file potrebbero essere specifici dell'implementazione)


10

Dall'utente @jamylak una forma alternativa di open("filename","w").close()è

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

8

Durante l'utilizzo with open("myfile.txt", "r+") as my_file:, ottengo strani zeri myfile.txt, soprattutto perché sto leggendo prima il file. Perché funzioni, ho prima dovuto cambiare il puntatore my_fileall'inizio del file con my_file.seek(0). Quindi potrei fare my_file.truncate()per cancellare il file.


1
Questo non dovrebbe sorprendere, è stato menzionato in questa risposta 3 anni prima.
AMC

6

Devi sovrascrivere il file. In C ++:

#include <fstream>

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

1
Non è necessario per la close()chiamata. Il distruttore chiuderà il file. Quindi devi solo creare un temporaneo:ofstream("test.txt");
Wilhelmtell,

Questa domanda è cambiata da questa risposta. Forse eliminare la domanda data la nuova direzione della domanda?
Seanny123,

1

Assegnare il puntatore del file a null all'interno del programma eliminerà semplicemente quel riferimento al file. Il file è ancora lì. Penso che la remove()funzione in c stdio.hsia ciò che stai cercando lì. Non sono sicuro di Python.


2
A proposito, sia remove () che unlink () ridurranno il conteggio dei riferimenti su un file normale, non lo cancelleranno effettivamente. Il file verrà cancellato quando il conteggio dei riferimenti scende a zero. Ad esempio, se il processo ha il file aperto e si chiama unlink () o remove () su di esso, non verrà eliminato fino a quando il file non è chiuso () d (ovvero il conteggio dei riferimenti scende a zero - non presuppone altri processi avere il file aperto). Questo comportamento è utile, ad esempio, per garantire che i file temporanei non vengano lasciati in giro dopo un'interruzione anomala del processo (ad es. Open (), unlink (), esecuzione del file IO, CRASH , close () NON chiamato).
Vuoto

1

Se la sicurezza è importante per te, aprire il file per la scrittura e chiuderlo di nuovo non sarà sufficiente. Almeno alcune delle informazioni saranno ancora sul dispositivo di archiviazione e potrebbero essere trovate, ad esempio, usando un'utilità di recupero del disco.

Supponiamo, ad esempio, che il file che stai cancellando contenga password di produzione e debba essere eliminato immediatamente dopo il completamento della presente operazione.

Azzerare il file una volta che hai finito di usarlo aiuta a garantire che le informazioni sensibili vengano distrutte.

In un recente progetto abbiamo utilizzato il seguente codice, che funziona bene per piccoli file di testo. Sovrascrive i contenuti esistenti con linee di zeri.

import os

def destroy_password_file(password_filename):
    with open(password_filename) as password_file:
        text = password_file.read()
    lentext = len(text)
    zero_fill_line_length = 40
    zero_fill = ['0' * zero_fill_line_length
                      for _
                      in range(lentext // zero_fill_line_length + 1)]
    zero_fill = os.linesep.join(zero_fill)
    with open(password_filename, 'w') as password_file:
        password_file.write(zero_fill)

Nota che il riempimento zero non garantirà la tua sicurezza. Se sei davvero preoccupato, sarebbe meglio riempire zero e utilizzare un'utilità specializzata come File Shredder o CCleaner per pulire lo spazio "vuoto" sul tuo disco.


0

Non è possibile "cancellare" da un file sul posto a meno che non sia necessario cancellare la fine. O accontentati di una sovrascrittura di un valore "vuoto", oppure leggi le parti del file che ti interessano e scrivile in un altro file.


ok come sovrascriverlo senza dare valore spazzatura? voglio dire supponiamo che ci sia una lunghezza della stringa di 9 e lo sto sovrascrivendo con una lunghezza della stringa di 6. ciò significherebbe 3 valori di immondizia rt?
Hick,

Corretta. Inoltre dovresti avere un modo per identificare a qualsiasi lettore il fatto che quei 3 personaggi sono spazzatura.
Ignacio Vazquez-Abrams,

il fatto è che il mio codice è suddiviso tra python e c ++. quindi se un file viene letto in C ++ e il file viene scritto in Python .. entrambi i tempi in cui il file deve essere cancellato ..
Hick

0

Poiché i file di testo sono sequenziali, non è possibile cancellare direttamente i dati su di essi. Le tue opzioni sono:

  • Il modo più comune è creare un nuovo file. Leggi dal file originale e scrivi tutto sul nuovo file, tranne la parte che desideri cancellare. Quando tutto il file è stato scritto, eliminare il vecchio file e rinominare il nuovo file in modo che abbia il nome originale.
  • È inoltre possibile troncare e riscrivere l'intero file dal punto in cui si desidera modificare in seguito. Cerca di indicare che desideri modificare e leggi il resto del file in memoria. Cerca nello stesso punto, tronca il file e riscrivi il contenuto senza la parte che desideri cancellare.
  • Un'altra semplice opzione è quella di sovrascrivere i dati con altri dati della stessa lunghezza. Per questo, cerca la posizione esatta e scrivi i nuovi dati. Il limite è che deve avere esattamente la stessa lunghezza.

Guarda il metodo seek/ truncatefunzione / per implementare una qualsiasi delle idee sopra. Sia Python che C hanno queste funzioni.


voglio solo cancellare l'intero file dall'inizio
Hick,

2
Quindi basta rimuovere il file. Utilizzare os.removeo os.unlinkin Python o unlinkin C. Un'altra opzione è semplicemente riaprire il file per la scrittura o l'uso truncate.
nosklo,

0

Scrivere e leggere il contenuto del file

def writeTempFile(text = ''):
    filePath = "/temp/file1.txt"
    if not text:                      # If blank return file content
        f = open(filePath, "r")
        slug = f.read()
        return slug
    else:
        f = open(filePath, "a") # Create a blank file
        f.seek(0)  # sets  point at the beginning of the file
        f.truncate()  # Clear previous content
        f.write(text) # Write file
        f.close() # Close file
        return text

Ha funzionato per me


0

Puoi anche usare questo (basato su alcune delle risposte sopra):

file = open('filename.txt', 'w')
file.write('')
file.close

ovviamente questo è un modo davvero brutto per cancellare un file perché richiede così tante righe di codice, ma ho appena scritto questo per mostrarti che può essere fatto anche con questo metodo.

buona programmazione!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.