Respostas:
Em python:
open('file.txt', 'w').close()
Ou, como alternativa, se você já possui um arquivo aberto:
f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+
Em C ++, você poderia usar algo semelhante.
#include<fstream>
e depois std::ofstream("file.txt");
tão curto quanto em Python. :)
f.seek(0)
depois f.truncate(0)
; caso contrário, você terá \ x00 estranhos anexados no início do arquivo.
Não é uma resposta completa, mas uma extensão da resposta de ondra
Ao usar truncate()
(meu método preferido), verifique se o cursor está na posição desejada. Quando um novo arquivo é aberto para leitura - open('FILE_NAME','r')
o cursor está em 0 por padrão. Porém, se você analisou o arquivo no seu código, aponte para o início do arquivo novamente. truncate(0)
Por padrão, truncate()
trunca o conteúdo de um arquivo começando na posição atual do cusror.
A abertura de um arquivo no modo "gravação" o limpa, você não precisa especificamente gravar nele:
open("filename", "w").close()
(você deve fechá-lo, pois o momento em que o arquivo é fechado automaticamente pode ser específico da implementação)
Do usuário @jamylak, uma forma alternativa open("filename","w").close()
é
with open('filename.txt','w'): pass
Ao usar with open("myfile.txt", "r+") as my_file:
, recebo zeros estranhos myfile.txt
, principalmente porque estou lendo o arquivo primeiro. Para que funcionasse, tive que mudar primeiro o ponteiro my_file
para o início do arquivo com my_file.seek(0)
. Então eu poderia fazer my_file.truncate()
para limpar o arquivo.
Você precisa substituir o arquivo. Em C ++:
#include <fstream>
std::ofstream("test.txt", std::ios::out).close();
close()
ligação. O destruidor fechará o arquivo. Então você só precisa criar um temporária:ofstream("test.txt");
Atribuir o ponteiro do arquivo a nulo dentro do seu programa irá se livrar dessa referência ao arquivo. O arquivo ainda está lá. Eu acho que a remove()
função no c stdio.h
é o que você está procurando lá. Não tenho certeza sobre Python.
Se a segurança é importante para você, abrir o arquivo para gravá-lo e fechá-lo novamente não será suficiente. Pelo menos algumas das informações ainda estarão no dispositivo de armazenamento e podem ser encontradas, por exemplo, usando um utilitário de recuperação de disco.
Suponha, por exemplo, que o arquivo que você está apagando contenha senhas de produção e precise ser excluído imediatamente após a conclusão da operação atual.
O preenchimento zero do arquivo depois que você o usa ajuda a garantir que as informações confidenciais sejam destruídas.
Em um projeto recente, usamos o código a seguir, que funciona bem para pequenos arquivos de texto. Ele substitui o conteúdo existente por linhas de zeros.
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)
Observe que o preenchimento zero não garantirá sua segurança. Se você estiver realmente preocupado, é melhor preencher o zero e usar um utilitário especializado como o File Shredder ou o CCleaner para limpar o espaço 'vazio' da sua unidade.
Você não pode "apagar" de um arquivo no local, a menos que precise apagar o final. Satisfaça-se com uma substituição de um valor "vazio" ou leia as partes do arquivo que lhe interessam e grave-as em outro arquivo.
Como os arquivos de texto são seqüenciais, você não pode apagar dados diretamente neles. Suas opções são:
Veja o seek
/ truncate
function / método para implementar qualquer uma das idéias acima. Tanto o Python quanto o C têm essas funções.
os.remove
ou os.unlink
em python, ou unlink
em C. Outra opção é apenas reabrir o arquivo para gravação ou uso truncate
.
Escrevendo e lendo o conteúdo do arquivo
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
Funcionou para mim
Você também pode usar isso (com base em algumas das respostas acima):
file = open('filename.txt', 'w')
file.write('')
file.close
é claro que essa é uma maneira muito ruim de limpar um arquivo porque requer muitas linhas de código, mas acabei de escrever isso para mostrar que isso também pode ser feito nesse método.
feliz codificação!