У меня есть текстовый файл, который я хочу стереть в Python. Как я могу это сделать?
У меня есть текстовый файл, который я хочу стереть в Python. Как я могу это сделать?
Ответы:
В питоне:
open('file.txt', 'w').close()
Или, если у вас уже есть открытый файл:
f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+
В C ++ вы можете использовать нечто подобное.
#include<fstream>а потом std::ofstream("file.txt");примерно такой же короткий, как в Python. :)
f.seek(0)после f.truncate(0), иначе у вас будет странный \ x00, добавленный в начале файла.
Не полный ответ, а скорее продолжение ответа Ондры
При использовании truncate()(мой предпочтительный метод) убедитесь, что курсор находится в нужной позиции. Когда новый файл открывается для чтения - open('FILE_NAME','r')его курсор по умолчанию равен 0. Но если вы проанализировали файл в своем коде, убедитесь, что он снова указывал на начало файла, т.е. truncate(0)
по умолчанию truncate()обрезает содержимое файла, начиная с текущей позиции ошибки.
Открытие файла в режиме «запись» очищает его, вам не нужно специально писать в него:
open("filename", "w").close()
(вы должны закрыть его, так как время, когда файл закрывается автоматически, может зависеть от реализации)
От пользователя @jamylak альтернативной формой open("filename","w").close()является
with open('filename.txt','w'): pass
При использовании with open("myfile.txt", "r+") as my_file:получаются странные нули myfile.txt, тем более что сначала читаю файл. Чтобы он заработал, мне пришлось сначала изменить указатель my_fileна начало файла с помощью my_file.seek(0). Тогда я смог my_file.truncate()бы очистить файл.
Вы должны перезаписать файл. В C ++:
#include <fstream>
std::ofstream("test.txt", std::ios::out).close();
close()Звонок не нужен . Деструктор закроет файл. Так что вам просто нужно создать временный:ofstream("test.txt");
Назначение нулевого указателя файла внутри вашей программы просто избавит от этой ссылки на файл. Файл все еще там. Я думаю, что remove()функция в c stdio.h- это то, что вы там ищете. Не уверен насчет Python.
Если для вас важна безопасность, то открытия файла для записи и его повторного закрытия будет недостаточно. По крайней мере, часть информации все еще будет на устройстве хранения, и ее можно будет найти, например, с помощью утилиты восстановления диска.
Предположим, например, что удаляемый файл содержит производственные пароли и его необходимо удалить сразу после завершения текущей операции.
Обнуление файла после того, как вы закончили его использовать, помогает обеспечить уничтожение конфиденциальной информации.
В недавнем проекте мы использовали следующий код, который хорошо работает с небольшими текстовыми файлами. Он заменяет существующее содержимое строками нулей.
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)
Учтите, что обнуление не гарантирует вашей безопасности. Если вы действительно обеспокоены, вам лучше всего обнулить и использовать специальную утилиту, такую как File Shredder или CCleaner, чтобы очистить «пустое» пространство на вашем диске.
Вы не можете «стереть» файл на месте, если вам не нужно стереть конец. Либо довольствуйтесь перезаписью «пустого» значения, либо прочтите части файла, которые вам интересны, и запишите их в другой файл.
Поскольку текстовые файлы являются последовательными, вы не можете напрямую стереть данные с них. Ваши варианты:
Посмотрите на метод seek/ truncatefunction /, чтобы реализовать любую из вышеперечисленных идей. И Python, и C имеют эти функции.
os.removeили os.unlinkв python, или unlinkв C. Другой вариант - просто повторно открыть файл для записи или использования truncate.
Запись и чтение содержимого файла
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
Это сработало для меня
Вы также можете использовать это (на основе нескольких из приведенных выше ответов):
file = open('filename.txt', 'w')
file.write('')
file.close
конечно, это действительно плохой способ очистить файл, потому что для этого требуется очень много строк кода, но я просто написал это, чтобы показать вам, что это можно сделать и этим методом.
счастливого кодирования!